Perl使用名稱空間作爲變量名稱,當Perl看到::
或'
時,它使用Perl,它假定以前是包(即名稱空間)名稱。它類似於此錯誤:
use strict;
use warnings; # You're using these? Aren't you?
my $foo = "bar"
print "The magic word is $foo_for_you\n";
由於下劃線是變量名的有效字符,Perl中假定你想要的變量$foo_for_you
與_for_you
附加價值不$foo
。那麼,你會認爲這是一個錯誤或功能?它是從這個有什麼區別:
print "The magic word is $foobar\n"; # Whoops! my variable is $foo.
來解決這個問題是要絕對清楚地表明$foo
的方式是你的變量:
print "The magic word is " . $foo . "_for_you\n";
printf "The magic word is %s_for_you\n", $foo;
print "The magic word is ${foo}_for_you\n";
,如果你有同樣的問題$foo::for::you
(或$foo'for'you
)在這種情況下,Perl正在名稱空間foo::for
中尋找名爲$you
的變量。你可以想像,你可以用類似的解決方案:
print "The magic word is " . $foo . "::for::you\n";
printf "The magic word is %d::for::you\n", $foo;
print "The magic word is ${foo}::for::you\n";
命名空間用來幫助保持Perl模塊變量在你的程序修改變量。想象一下,在一個Perl包中調用一個函數,並突然發現你的程序中使用的變量發生了變化。
看看File::Find,你可以看到變量與連接到他們($File::Find::name
和$File::Find::dir
是兩個例子)包命名空間。
總是使用'use strict;使用警告;'。這會說你打印了未定義的變量'$ word :: test'。 – ikegami