簡體   English   中英

為什么我無法訪問我在Perl中的同一個包中聲明的子包中聲明的變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM