有人可以解释为什么Perl以这种方式行事(可变范围界定)?
我的测试是这样的:
use strict; use warnings; func(); my $string = 'string'; func(); sub func { print $string,"n"; } 结果是: Use of uninitialized value $string in print at test.pl line 10. string Perl允许我们在定义函数之前调用函数.但是当函数使用仅在函数调用之后声明的变量时,变量看起来是未定义的.这个行为是否记录在某个地方?谢谢! 解决方法
我的行为记录在
perlsub – 它归结为这个 – perl知道$string在范围内 – 因为我这么说.
这意味着它从“首先被看到”到现在的“块”的关闭括号之间是“范围”. (或者在你的例子中 – 代码的结尾) 然而,在你的例子中,我也分配一个值. 此范围界定过程发生在编译时 – 其中perl检查使用$string有效的位置. (感谢严格).但是,它不能知道该值是什么,因为在代码执行期间可能会发生变化. (并不是平凡的分析) 所以如果你这样做可能会更清楚一些事情: #!/usr/bin/env perl use strict; use warnings; my $string; #undefined func(); $string = 'string'; func(); sub func { print $string,"n"; } $string在这两种情况下都是范围的 – 因为我在编译时发生了 – 在子例程被调用之前 – 但是在第一次调用之前,它没有超出默认值undef的值. 注意与以下对比: #!/usr/bin/env perl use strict; use warnings; sub func { print $string,"n"; } my $string; #undefined func(); $string = 'string'; func(); 哪些错误是因为当sub被声明时,$string不在范围内. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |