首页 > 解决方案 > 是否可以将键值对直接推送到 perl 中的散列?

问题描述

我知道pushing 只能传递给数组,而不是哈希。但是允许直接将键值对推送到散列会更方便(我仍然很惊讶在 perl 中这是不可能的)。我有一个例子:

#!/usr/bin/perl -w

#superior words begin first, example of that word follow
my @ar = qw[Animals,dog Money,pound Jobs,doctor Food];
my %hash;
my $bool = 1;

sub marine{
    my $ar = shift if $bool;
    for(@$ar){
        my @ar2 = split /,/, $_;
        push %hash, ($ar2[0] => $ar2[1]);
    }
}

marine(\@ar);
print "$_\n" for keys %hash;

这里我有一个数组,它有两个用,逗号分开的单词。我想从中创建一个哈希,使第一个成为键,第二个成为值(如果它缺少值,就像最后一个Food词一样,那么根本没有值-> 只是 undef。如何使它珀尔?

输出

Possible attempt to separate words with commas at ./a line 4.
Experimental push on scalar is now forbidden at ./a line 12, near ");"
Execution of ./a aborted due to compilation errors.

标签: perlhashpushkey-value

解决方案


我可能在这里过于简单化了,但为什么不简单地分配给哈希而不是试图推入它呢?

也就是说,替换这个不受支持的表达式:

push %hash, ($ar2[0] => $ar2[1]);

和:

$hash{$ar2[0]} = $ar2[1];

如果我将它包含在您的代码中,然后在最后转储生成的哈希,我会得到:

$VAR1 = {
          'Food' => undef,
          'Money' => 'pound',
          'Animals' => 'dog',
          'Jobs' => 'doctor'
        };

推荐阅读