2012-04-26 59 views
0

如果Perl子例程使用全局變量,是否有方法生成警告?在Perl中使用全局變量時生成警告

#!/usr/bin/perl -w 
use strict; 
my $GlobalVariable; 

# Main Start 

# Main End 

sub MyFunction 
{ 
    my $LocalVariable; 
    $GlobalVariable=1; 

} 

在這段代碼是有反正在Perl中警告說MyFunction()使用$GlobalVariable

+0

人們會建議[嚴格](http://search.cpan.org/perldoc?strict),但其檢查存在例外情況。子名不被檢查('$ foo'死亡,但不是'foo()'),也不是全局('$ foo'死亡,但不是'* foo'或'print foo')。另外,strict會產生異常,而不是警告。 – ikegami 2012-04-26 23:32:13

回答

2

標準做法是use strict 'vars';。 輸入完成後,您必須完全限定全局變量(例如$main::GlobalVar),否則Perl將引發編譯時錯誤。

+0

即使嚴格使用Perl,Perl也將允許子程序使用全局變量;我在這裏錯過了什麼嗎? – Jean 2012-05-07 18:36:06

1

是的,只是use strict它會趕上嘗試訪問任何變量,除非你明確聲明它爲局部或全局或完全限定它的名字。你可以嘗試tie訪問當前的包全局範圍(它畢竟是一個哈希)來訪問已聲明的變量,但不建議這樣做,因爲有許多合法的理由可以這樣做(例如, perlodc perlvar)。

+0

家長評論忽略了問題的關鍵。看看上面的代碼,它使用嚴格的,並在一個子使用全局變量。在這種情況下,Strict不會*發出警告。 – Freddo411 2014-03-27 17:28:41

1

如果你的意思是「警告如果Perl代碼使用任何全局變量」,我不認爲目前有一種預定義的方式來做到這一點。

如果你不想使用任何非標準的Perl全局變量,你可以使用像CPAN中的Devel :: FindGlobals這樣的東西來獲得所有的全局變量,然後警告是否有任何非標準的全局變量定義變量。