有条件地包含使用if pragma的Perl模块时出错

rod*_*dee 1 perl json

这很好用:

use if (1), 'x86_64-linux-thread-multi::Devel::Cover::DB::IO::JSON';
Run Code Online (Sandbox Code Playgroud)

但不是这个:

my $a=1;
use if ($a), 'x86_64-linux-thread-multi::Devel::Cover::DB::IO::JSON';
Run Code Online (Sandbox Code Playgroud)

后来打印错误Can't locate object method "new" via package "JSON" (perhaps you forgot to load "JSON"?) at ./script.pl line 100.,我$json = JSON->new;在第100行.

我使用的是Perl 5.16.2版本,有什么帮助吗?提前致谢.

Sea*_*ean 5

变量的赋值在运行时use发生,而在编译时发生.因此,在您的示例中,$ause发生时未分配任何值,因此它的计算结果为undef.

$a在编译时分配,请使用BEGIN:

my $a;
BEGIN { $a = 1 }
use if ($a), 'x86_64-linux-thread-multi::Devel::Cover::DB::IO::JSON';
Run Code Online (Sandbox Code Playgroud)

您还应该意识到,使变量$a$b词汇通常不受欢迎,因为它会干扰sort函数的正常运行.