首页 > 解决方案 > Perl - 使用字符串代替哈希键

问题描述

在动态循环中,我想生成字符串,然后将它们分配为哈希键,然后将一些值绑定到它们中的每一个。我所做的是(不使用严格)

$number = 1; %clause = ();

for(condition)
  {
     if (condition)
     { 
       $name = join '', 'hash', $number; 
       $clause{$$name} =  [ @somearray ];
       $number++;
    }
 }

我所期望的是有一个带有名为 hash1,hash2.. 等键的子句散列。现在它实际上可以工作,但是只有一次,只适用于最后一个值。例如,我编写此代码,它只输出分配给最后一个哈希键的最后一个数组。似乎 $name 被覆盖了

foreach $key (keys %clause)

{ print "@{$clause{$key}}"; }

你能告诉我怎么做吗,谢谢

标签: perlhash

解决方案


我建议您稍微重写该循环并使用字符串插值构建您的密钥。你不需要$name循环之外的任何东西。

use strict;
my $number = 1;
for my $item (@items)
{
  if ( i_care_about($item) )
  { 
   $clause{"hash$number"} =  [ @somearray ];
   $number++;
  }
}

由于您想要一个字符串作为键,只需构建一个字符串。


推荐阅读