Pattern matching Befehl kürzer schreiben?

Hi, ich habe da bei meinem Erstellten Script einen Matching Befehl der funktioniert, aber ich glaube, daß er kürzer gehen müsste:

(($FORM{‚alc‘} =~ /Any|$alc/) && (($nowdt =~ /$dmonth/ && $nowdt =~ /$dyear/) || ($nowdt =~ /$ddmonth/ && $nowdt =~ /$ddyear/) || ($nowdt =~ /$dddmonth/ && $nowdt =~ /$dddyear/)))

Dieser Abschnitt:
(($nowdt =~ /$dmonth/ && $nowdt =~ /$dyear/) || ($nowdt =~ /$ddmonth/ && $nowdt =~ /$ddyear/) || ($nowdt =~ /$dddmonth/ && $nowdt =~ /$dddyear/))

müsste doch irgendwie zu kürzen gehen oder?

($nowdt =~ /$dmonth/ && /$dyear/) funktioniert aus irgend einem Grund nicht. Hat jemand eine Ahnung warum?

Danke

Martin

Hi,

Dieser Abschnitt:
müsste doch irgendwie zu kürzen gehen oder?

nein, wieso sollte er?

($nowdt =~ /$dmonth/ && /$dyear/) funktioniert aus irgend
einem Grund nicht. Hat jemand eine Ahnung warum?

Weil Du hiermit zwei UND-verknüpfte boole’sche Werte hast:

a) „$nowdt =~ /$dmonth/“ und
b) „/$dyear/“, welches identisch ist mit „$_ =~ /$dyear/“.

Ich nehme einfach mal an, dass in $_ der Wert von $dyear nicht vorkommt.

Cheatah

Danke
Hi,

Danke für die Info!

Bin ich doch nicht so dumm :smile:

Im Buch Perl in 21 Tagen wurde dauernd etwas gekürzt und dann komme ich mit so langen Patten Matching Befehlen daher.

Danke für Deine Info. Jetzt ist mir einiges klarer!

Martin

Ich nehme einfach mal an, dass in $_ der Wert von $dyear nicht
vorkommt.

warum eigentlcih nicht?

$\_ = $nowdt;
(($FORM{'alc'} =~ /Any|$alc/) && ( ( /$dmonth/ && /$dyear/ ) || ( /$ddmonth/ && /$ddyear/) || ( /$dddmonth/ && /$dddyear/) ) )