У меня есть функция, которая проверяет правильность данных (то есть неотрицательно) и должна предупредить, а затем выйти из под. Проблема, с которой я сталкиваюсь, заключается в том, что предупреждение подавляется. Может ли кто-нибудь объяснить, почему предупреждение подавляется?Предупреждение не отправляется в stderr
#!/usr/bin/perl
use strict;
use warnings;
my $a = b();
print "Function returned $a\n";
sub b
{
my $a = -1;
($a >= 0) || (warn "\$a is negative" && return 0);
print "Passed negative check\n";
return 1;
}
Выход, который я получать это
Function returned 0
Было бы слишком много, чтобы попросить использовать регулярный 'if' здесь? Просто потому, что вы можете написать это так в Perl, это не делает его хорошей идеей. – tadman
Вы можете точно увидеть, что происходит, используя 'B :: Deparse':' perl -MO = Deparse -e 'sub foo {(-1> = 0) || (предупреждение «foo» && return 0)} foo'' выплевывает 'sub foo {warn return (0); } foo; ' – ThisSuitIsBlackNot
Обратите внимание, что использование лексики' $ a' и '$ b' считается плохой формой, так как это может испортить' sort' и подобные функции. – ikegami