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)
| 归档时间: |
|
| 查看次数: |
472 次 |
| 最近记录: |