[英]Why i can't access my variable declared in package from sub declared in the same package in Perl?
我不明白為什么不能在sub mysub
訪問變量$var
。 兩個包都在同一個文件中完全定義,如下例所示:
use warnings;
use strict;
Util::mysub();
package Util;
use warnings;
use strict;
my $var = 'i have a value!';
# prints 'var in package: i have a value!'
print "var in package: $var\n";
sub mysub {
# generates warning 'Use of uninitialized value $var...'
print "var in sub: $var\n";
}
1;
在分配給文件作用域$var
之前,您可以調用Util::mysub()
幾行。
如果您的包在一個單獨的文件中,則use
語句及其隱含的BEGIN
塊將賦予賦值優先級。 或者,您可以先放置包定義或使用自己的BEGIN
塊。
您可以訪問sub中的變量,它尚未設置。
my
有編譯時和運行時行為。 在編譯時,它為封閉范圍的其余部分聲明一個變量名,從而use strict
happy。 當控制流到達聲明時,初始化在運行時發生。 因為你對mysub()
調用是在控制流到達my $var = ...
之前發生的,所以在mysub
看到的$var
的值是undef
,perl會發出“使用未初始化的值...”警告。 如果你在my $var = ...
之后調用了你的子,它將被定義,你會看到該值而不是警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.