2013-08-29 141 views
1

是否有效的Perl在BEGIN塊中設置變量,但在BEGIN塊之外聲明該變量?BEGIN塊和變量聲明

#!/usr/bin/env perl 
use strict; 
use warnings; 
use 5.10.0; 

my $var; 

BEGIN{ $var = 10 } 

say $var; 
+3

您爲什麼不嘗試一下?如果它無效,perl會告訴你 –

+0

我試過了,但我不喜歡它 - 也許我希望有人會說「......,但不要用它」。 –

回答

7

是的,它是有效的。事實上,你必須這樣做,否則$var將在BEGIN塊本地,而在你的程序的其餘部分不可用。引用perlsub

A my同時具有編譯時和運行時效果。在編譯時,編譯器會注意到它。 ...實際的初始化會延遲到運行時間,但是,例如,它會在適當的時間執行,例如每次通過循環時執行。

編譯時效果是爲什麼您可以訪問BEGIN塊中的變量。要知道,在my任何初始化將於 BEGIN塊後評估(並因此將覆蓋BEGIN可能設置的任何值。)

3

是的,但你可能要小心使用這種模式,因爲非常相似的東西的工作方式與您預期的不同:

my $var = 5; 
BEGIN { $var = 10 } 

say $var; # 5