標籤:
use strict包含3個部分。其中之一(use strict "subs")負責禁止亂用的裸字。
這是什麼意思呢?
如果沒有這個限制,下面的代碼也可以列印出"hello"。
my $x = hello;print "$x\n"; # hello
這樣使用不符合我們平常把字串放在引號裡的習慣,但是Perl預設是允許(使用)裸字——沒有引號的單詞——來作為字串。
上面的代碼輸出"hello"。
當然至少在指令碼頂部預設添加"hello"函數之前(是這樣):
sub hello { return "zzz";}my $x = hello;print "$x\n"; # zzz
在新版本中,Perl看到了hello()函數,調用它(函數)並將結果賦值給$x。
之後,如果有人將這個函數放在檔案的結尾(賦值之後),Perl在賦值的時候就看不到函數,又回到老樣子了:把"hello"賦給$x。
是的,你肯定不想自己陷入麻煩。那麼請在代碼中使用use strict來禁止裸字hello出現在代碼中,從而避免困惑。
use strict;my $x = hello;print "$x\n";
會給出如下錯誤:
Bareword "hello" not allowed while "strict subs" in use at script.pl line 3.Execution of script.pl aborted due to compilation errors.
裸字的正確使用
即便開啟了use strict "subs"還是有些地方可以使用裸字。
首先,使用者自訂的函數名就是裸字。
同樣,在提取雜湊表元素花括弧裡也使用了裸字,以及胖箭頭=>的左邊也可以沒有引號。
use strict;use warnings;my %h = ( name => ‘Foo‘ );print $h{name}, "\n";
上面代碼中的"name"都是裸字,它們在use strict的時候也是有效。
perl學習之裸字