【发布时间】:2015-09-01 11:47:23
【问题描述】:
谁能向我解释一下为什么在包中声明的变量不能被 eval 函数访问,除非它在子程序中使用一次?
(perl v5.16.3 MSWin32-x64-多线程ActiveState)
包装:
use strict;
use warnings;
package testPackage;
my $insertVar = "TEST";
sub testSub {
my $class = shift;
my $test = shift;
eval '$test="'.$test.'";';
return $test;
}
1;
程序:
use strict ;
use warnings ;
use testPackage ;
my $testVar = q[insertVar = ${insertVar}] ;
$testVar = testPackage->testSub( $testVar ) ;
print "$testVar\n" ;
执行程序时的结果:
在连接 (.) 或字符串中使用未初始化的值 $insertVar 在 (eval 1) 第 1 行。 insertVar =
现在,如果我在 testSub 中使用变量(例如打印它):
use strict;
use warnings;
package testPackage;
my $insertVar = "TEST";
sub testSub {
my $class = shift;
my $test = shift;
print $insertVar . "\n";
eval '$test="'.$test.'";';
return $test;
}
1;
然后程序完全按照我的预期运行:
测试
insertVar = 测试
【问题讨论】:
-
你到底为什么要
eval分配一个变量来设置自己?
标签: perl scope package eval lexical