我創建了全局散列,當我嘗試從perl子例程中訪問該散列時,它無法訪問它。在perl中的子例程中訪問全局散列
我已經聲明它: %HASH =();
,並試圖訪問它在子程序爲:
$HASH{$key} = $value;
請指引我,如果我做錯了什麼
我創建了全局散列,當我嘗試從perl子例程中訪問該散列時,它無法訪問它。在perl中的子例程中訪問全局散列
我已經聲明它: %HASH =();
,並試圖訪問它在子程序爲:
$HASH{$key} = $value;
請指引我,如果我做錯了什麼
做工精細這裏:
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
our %truth =(); # "global" truth: lexical name
# for the package variable %main::truth
sub add_to_truth {
my ($thing, $value) = @_;
$truth{$thing} = $value;
}
add_to_truth(answer => 42);
say $truth{answer};
輸出:
42
注意下strict數目字,你有自己的包名(%main::truth
在這種情況下),以完全符合你的「全局」變量或爲他們創造一個詞法範圍的本地名稱與our 。今天編程沒有狹窄(和警告)是不是一件好事™。事實上,激活它們會告訴你一些有用的東西。
+ Perl +幽默=) –
在這種情況下,'我們'是絕對必要的嗎?我用'我'試了一下,它也起作用。據我瞭解,'我們'是用來當你想與整個包分享。 – tudor
散列是在同一個文件中的sub之前聲明的嗎?你有'使用嚴格'和'使用警告'嗎?發佈更多代碼 – didster
顯示一些演示您的問題的相關代碼。 – TLP
謝謝你們的幫助。我正在使用: push(@ {$ HASH {$ key}},$ value)推送數組中的哈希值,並未對數組進行排序,因此無法找到該值,而且在我看來,它無法訪問它。我的不好,謝謝你的幫助:) – iDev