2014-03-19 76 views
2

我試圖檢查一堆變量以確保它們已被定義。我想我會把變量名放入一個數組中,並循環遍歷數組,檢查每個變量是否被定義。然而,盡我所能理解,使用詞法變量的符號引用(由「我的」定義)不起作用。通過變量循環檢查是否定義

在Perl中有沒有一種方法可以檢查是否定義了大量的詞法變量而無需手動將每個變量名稱放入定義的語句中?如果我可以創建一個數組或其他東西來保存我希望檢查的已定義狀態的變量的名稱,似乎會更好。

回答

2

也把一個ref放在數組中。

my @vars = (
    [ '$x', \$x ], 
    [ '$y', \$y ], 
    [ '$z', \$z ], 
); 

for (@vars) { 
    my ($name, $ref) = @$_; 
    print("$name is undefined\n") if !defined($$ref); 
} 

我不明白當你包含變量時包含名字有什麼難的。另一種方法是讓PadWalker掃描內部。我不會在生產中使用它,但它可以在調試工具中使用。

+0

謝謝,這正是我無法弄清楚該怎麼做!看起來如果我想爲陣列做同樣的事情,我會做類似的事情: my @vars =( ['@x',\ @x], ['@y',\ @y] , ['@z',\ @z], ); (@vars){ my($ name,$ ref)= @ $ _; print(「$ name is undefined \ n」)if(not @ $ ref); } – user3435709

+0

'print(「$ name is empty \ n」)',但是。 – ikegami

0

這聽起來像你需要重新考慮你的代碼的結構。像這樣大量的詞彙變量表明一個糟糕的設計 - 如果他們可能不住在散列或數組中?然後他們可以更簡單地迭代。