我有一個名為@missing_ports 的陣列,該陣列一直在從不同的子例程和回圈中更新。所以陣列需要是全域的。如何在 perl 中將此陣列定義為全域陣列。代碼包含使用警告;使用嚴格;
我在沒有“my”關鍵字的程式開始時宣告了這個陣列,面對下面的錯誤@missing_ports“需要在experiment.pl 中明確的包名稱,我的關鍵字能夠解決錯誤,但陣列最終為空。
如何在 perl 中管理這種情況?
uj5u.com熱心網友回復:
下面創建一個詞法變數:
my @missing_ports;
如果將其放置在檔案的開頭,則該變數將對整個檔案可見。
下面創建一個別名為包(全域)變數的詞法變數:
our @missing_ports;
您可以在同一個包中的多個地方使用它。
您仍然需要使用其他包中的變數全名。
以下宣告包變數:
use vars qw( @missing_ports );
這不是詞法范圍的。
您仍然需要使用其他包中的變數全名。
當然,您始終可以使用變數的全名。
$main::missing_ports
這不需要宣告,但如果僅通過名稱參考一次,則會發出警告。所以最好將它與ouror結合起來use vars。
標點變數(例如$_)是“超級全域變數”。在沒有包名的情況下使用這些變數不會默認為當前包中的變數;它默認為 root/main命名空間中的一個變數。(例如,package Foo; $x; $_;意思是package Foo; $Foo::x; $main::_;。)沒有辦法制作額外的超全域變數。
作為最后一點,這里列出的所有方法my都非常強烈地表明存在錯誤代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/419515.html
標籤:
