Будьте осторожны с приоритетом здесь.
Контраст http://codepad.org/vEPnhWfH, который работает, как ожидалось, с http://codepad.org/nXVU5CA7, который не работает. Конечно, я немного подправил код, чтобы избежать вызова invalid
, но я подозреваю, что это может быть причиной проблемы.
В обоих случаях, хотя $1
содержит «2011», так что, возможно, вам следует показать дополнительный код, как того требует mu в первом комментарии.
UPDATE
Я изменил примеры кодов для использования вызова на &invalid
, и ошибка не отображается.
sub invalid {
print("INVALID\n");
}
sub check_with_if {
print("Trying with if-statement\n");
my $year = shift;
if ($year =~ /^(\d{4})$/) {
$year = $1;
} else {
&invalid($year);
}
print("\$1 is $1 and \$year is $year"."\n");
}
sub check_with_conditional {
print("Trying with conditional expression\n");
my $year = shift;
($year =~ /^(\d{4})$/) ? $year = $1 : &invalid($year);
print("\$1 is $1 and \$year is $year"."\n");
}
check_with_if("2011");
check_with_conditional("2011");
Выход
Trying with if-statement
$1 is 2011 and $year is 2011
Trying with conditional expression
$1 is 2011 and $year is 2011
http://codepad.org/z22GMEcn
РЕДАКТИРОВАТЬ 2 Также работает на 5.12.3 на Mac.
Я согласен с Джонатаном, что вы, возможно, обнаружили ошибку в 5.8.8, которая была исправлена с тех пор. Если вам невероятно любопытно, вы можете пройти через изменения в Perl, такие как: