是否有效的Perl在BEGIN
塊中設置變量,但在BEGIN
塊之外聲明該變量?BEGIN塊和變量聲明
#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0;
my $var;
BEGIN{ $var = 10 }
say $var;
是否有效的Perl在BEGIN
塊中設置變量,但在BEGIN
塊之外聲明該變量?BEGIN塊和變量聲明
#!/usr/bin/env perl
use strict;
use warnings;
use 5.10.0;
my $var;
BEGIN{ $var = 10 }
say $var;
是的,它是有效的。事實上,你必須這樣做,否則$var
將在BEGIN塊本地,而在你的程序的其餘部分不可用。引用perlsub:
A
my
同時具有編譯時和運行時效果。在編譯時,編譯器會注意到它。 ...實際的初始化會延遲到運行時間,但是,例如,它會在適當的時間執行,例如每次通過循環時執行。
編譯時效果是爲什麼您可以訪問BEGIN塊中的變量。要知道,在my
任何初始化將於 BEGIN塊後評估(並因此將覆蓋BEGIN可能設置的任何值。)
是的,但你可能要小心使用這種模式,因爲非常相似的東西的工作方式與您預期的不同:
my $var = 5;
BEGIN { $var = 10 }
say $var; # 5
您爲什麼不嘗試一下?如果它無效,perl會告訴你 –
我試過了,但我不喜歡它 - 也許我希望有人會說「......,但不要用它」。 –