2013-12-22 42 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;