是否可以在Perl中启用/禁用基于ARGV的使用严格/警告?

时间:2016-12-12 02:14:32

标签: perl

是否可以在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";

目的是仅在开发中启用警告消息。

2 个答案:

答案 0 :(得分:11)

use strict;

相当于

BEGIN {
   require strict;
   import strict;
}

因此use strict;的效果是无条件的(因为在评估import strict;之前评估if)。

此外,use strictuse 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 strictuse warnings是词汇。它们只适用于它们所在的块。如果将$x = 2放在与use语句相同的块中,则会引发异常。