是否可以将键值对直接推送到 perl 中的散列?

mil*_*bos 3 perl hash push key-value

我知道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;
Run Code Online (Sandbox Code Playgroud)

这里我有一个数组,它有 2 个单词,用,逗号分开。我想从中创建一个散列,使第一个是键,第二个是值(如果它缺少值,就像最后一个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.
Run Code Online (Sandbox Code Playgroud)

GMB*_*GMB 10

我可能在这里把事情简单化了,但为什么不简单地分配给散列而不是试图推入它呢?

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

push %hash, ($ar2[0] => $ar2[1]);
Run Code Online (Sandbox Code Playgroud)

和:

$hash{$ar2[0]} = $ar2[1];
Run Code Online (Sandbox Code Playgroud)

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

$VAR1 = {
          'Food' => undef,
          'Money' => 'pound',
          'Animals' => 'dog',
          'Jobs' => 'doctor'
        };
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用哈希切片一次执行多个操作(`@h{@keys} = @values;`) (6认同)