这很好用:
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版本,有什么帮助吗?提前致谢.
变量的赋值在运行时use发生,而在编译时发生.因此,在您的示例中,$a当use发生时未分配任何值,因此它的计算结果为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函数的正常运行.