我有一个哈希 my %read_data = ();
我正在尝试建立这样的键和值
$read_data{"status"} = 0;
$read_data{"suffix"} = "_SP";
$read_data{"consumption"} = 95;
我所看到的如下,我无法弄清楚我做错了什么。
Key=status
Key=0
Key=suffix
Key=_SP
Key=consumption
Key=95
我正在使用
for my $k1 (%read_data)
{
print "Key=".$k1."\n";
}
最佳答案
您正在使用的数组和散列之间存在关系:
my %hash = ( one => 1, two => 2, three => 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它返回一系列具有一个键和一个值的两个成员数组。
关于perl - 为什么将 Perl 哈希值添加为键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384362/