有之間的關係陣列和散列:
my %hash = (one => 1, two => 2, three => 3);
這創建在3成員散列,密鑰爲one
,two
和`三。那麼是這樣的:
my %hash = ("one", 1, "two", 2, "three", 3);
其實這兩條語句完全一樣。 =>
是一種形式句法糖用於突出顯示一個值與另一個值之間的關係。再次是同一行。我只是在這一個你的大腦搞亂,但它會產生相同的散列爲前:
my %hash = ("one", 1 => "two", 2 => "three", 3);
這裏的分配相同的哈希值的另一種方式:
my @array = ("one", 1, "two", 2, "three", 3);
my %hash = @array;
,這也是有效的太:
my @array = %hash;
在Perl中哈希和數組之間有很強的關係。如果你在一個哈希上下文中使用一個數組,它就變成了一個哈希。如果你在數組上下文中使用散列,它將成爲一個數組。 例如:
mysub (%hash);
sub mysub {
my %subhash = @_;
...
}
這是通過散列到的子程序的有效(儘管不是推薦的方法)。散列被翻譯成@_
數組,然後在子例程中被轉換回散列。
讓我們來看看你的循環:
for my $k1 (%read_data) {
的(...)
是一個列表/陣列的情況下,從而將您的%read_data
哈希,並在列表環境中,每個關鍵其次是目前它其值。
有幾種方法可以解決這個問題。一種方法是使用keys提取散列中的所有密鑰並返回密鑰數組。這通常與sort相結合,將鍵排列成某種秩序的外表。
for my $k1 (sort keys %read_data) {
另一種是用它返回一系列具有一個密鑰和一個值的兩個構件陣列的each。
您向我們展示了您的輸入,但不是用於生成輸出的代碼。 – Quentin
我忘了keys關鍵字以及生成調試輸出的內容。所有照顧在OP。 – octopusgrabbus
'使用Data :: Dumper;打印Dumper(\%read_data);' – toolic