2013-12-22 44 views
2

每一個簡單的Perl代碼,但我不明白它。Perl print%hash - 需要一些幫助來理解這個

在這裏,我們去

#!/usr/bin/env perl 
use warnings; 
use strict; 
my %hash; 
$hash{"key"} = "value"; 
$hash{"key2"} = "value2"; 
$hash{"key3"} = "value3"; 
print %hash."\n"; 

而且結果是3/8,刪除一個KEP => value對,結果是2/8

如果我刪除了."\n"那麼結果預計key3value3key2value2keyvalue1

無做這件事的理由,注意到這只是偶然地試圖瞭解發生了什麼。

+3

如果你是不是已經知道,數據(或將要下的perl-E,該交換機上的一些「新」的特點正在運行): :當你需要轉儲數據結構時,Dumper很有用,例如'使用Data :: Dumper;打印翻斗車\%散列;'。 – Chris

+1

我希望我可以upvote評論。自卸車,ftw。 – chooban

回答

7

當您將「\ n」附加到散列時,您會強制散列在標量上下文中進行插值,這會導致它打印出當前的容量和大小。當你刪除它時,哈希將在列表上下文中插入,並打印出當前的鍵/值對。

+1

很快,謝謝。 –

+4

請注意,它不是特別的「\ n」;它將散列作爲賦予其標量上下文的'.'運算符的操作數。 – ysth

+0

正如ysth指出,它是串聯導致的問題(謝謝指出)。爲打印函數提供多個參數可能更好,因爲它與單個連接字符串相反,即「print%hash」,\ n「;'這會產生預期的結果。 – Chris

3

儘管Mark已經完全覆蓋了這裏發生的一切,但您可以通過使用「say%hash」來獲得預期的結果,而不會強制哈希轉換爲標量上下文。在從5.10開始的perl版本中。

你需要use feature 'say';就像您use warnings;