我有这个代码
print "Starting\n";
BEGIN {
$module='Data::Dumper';
$module_available=1;
eval "use $module; 1" or $module_available = 0;
}
$var=1;
print "Module=$module_available\n";
print Dumper $var if ($module_available==1);
Run Code Online (Sandbox Code Playgroud)
输出是
Starting
Module=1
$VAR1 = 1;
Run Code Online (Sandbox Code Playgroud)
和这个
print "Starting\n";
$module='Data::Dumper';
$module_available=1;
eval "use $module; 1" or $module_available = 0;
$var=1;
print "Module=$module_available\n";
print Dumper $var if ($module_available==1);
Run Code Online (Sandbox Code Playgroud)
和输出
Starting
Module=1
Run Code Online (Sandbox Code Playgroud)
为什么在第一个场景中打印变量
你应该总是
use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)
在您的第二个示例中,当您的代码被编译时,Dumper不称为函数。所以 perl 把它当作一个裸字文件句柄。如果你使用警告,你会得到
print() on unopened filehandle Dumper at file.pl line 10.
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您将 eval 包装在 BEGIN 块中。SoDumper在其用法行被编译时已经导入。
您可以在此处阅读有关 BEGIN 块的更多信息:perlmod
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |