[Groningen-pm] Precedence verschil '||' en 'or'
Johan Vromans
jvromans at squirrel.nl
Mon Aug 28 05:06:01 PDT 2006
Arnoud Warmerdam <aw at warpnet.nl> writes:
> my ($newsecond) = m|^.*?\[\d+/\w+/\d+:(\d\d:\d\d:\d\d) \+\d+\]| ||
> warn "Cannot parse this line: $_";
De vraag is wat je met dit statement wilt. Je bedoelt (neem ik aan):
my ($newsecond) = m|^.*?\[\d+/\w+/\d+:(\d\d:\d\d:\d\d) \+\d+\]|
|| warn "...";
maar je zegt nu:
my ($newsecond) =
m|^.*?\[\d+/\w+/\d+:(\d\d:\d\d:\d\d) \+\d+\]| || warn "...";
Andersgeschreven:
my $newsecond;
if ( m|^.*?\[\d+/\w+/\d+:(\d\d:\d\d:\d\d) \+\d+\]| ) {
$newsecond = $1;
}
else {
$newsecond = warn "...";
}
Wat zoveel betekent als:
else {
warn "...";
$newsecond = 1;
}
Omdat je in dit soort gevallen eigenlijk nooit echt de waarde van de
warn (of die, of print) wilt toekennen is het dus beter om de
lager-prioriteit "or" te gebruiken:
my ($newsecond) = m|^.*?\[\d+/\w+/\d+:(\d\d:\d\d:\d\d) \+\d+\]|
or warn "...";
Nu krijgt $newsecond de waarde undefined (die hij al had, maar okee)
als de match faalt.
Groetjes,
Johan
More information about the Groningen-pm
mailing list