是否可以在Perl中启用/禁用基于ARGV的使用严格/警告?
我试过这段代码,但它没有用。我认为它应该在' $ x = 2';
的行中产生警告错误# Do this at the beginning of the script
BEGIN {
if ( $ARGV[0] =~ /^Y$/i ) {
use strict;
use warnings;
}
else {
no strict;
no warnings;
}
}
$x = 2;
print "x is $x\n";
目的是仅在开发中启用警告消息。
答案 0 :(得分:11)
use strict;
相当于
BEGIN {
require strict;
import strict;
}
因此use strict;
的效果是无条件的(因为在评估import strict;
之前评估if
)。
此外,use strict
和use warnings
的影响都是词法范围的,因此它们的效果仅限于它们所处的格式。
使用
no strict; # Probably not actually needed.
no warnings; # Probably not actually needed.
use if scalar( $ARGV[0] =~ /^Y\z/i ), 'strict';
use if scalar( $ARGV[0] =~ /^Y\z/i ), 'warnings';
答案 1 :(得分:0)
use strict
和use warnings
是词汇。它们只适用于它们所在的块。如果将$x = 2
放在与use
语句相同的块中,则会引发异常。