【问题标题】:Create Perl hashes named according the contents of another variable创建根据另一个变量的内容命名的 Perl 哈希
【发布时间】:2013-11-11 23:00:46
【问题描述】:

我有一个名称数组,我希望为每个名称创建一个散列,并将其作为变量名。像这样的

@list = ('Name1', 'Name2', 'Name3')  

for ($i = 0; $i < scalar @list; $i++) {  
  %(list[$i]);  
}  

谁能告诉我这是否可行?

【问题讨论】:

  • 之后没有添加键和值。首先我需要创建几个哈希。我当然还需要能够使用变量添加这些(例如 $list[x])。
  • 做这种事情的正确方法是使用散列,你有这个效果的答案。 可以做你所描述的,但这是一个非常糟糕的主意。一方面,您如何知道已创建的哈希的名称是什么?如果您知道它们的名称以便可以显式访问它们,那么您也可以显式声明它们。
  • 另外,for ($i = 0; $i &lt; scalar @list; $i++) { ... } 通常写成for my $i (0 .. $#list) { ... }
  • 你有@list = ('Name1', 'Name2', 'Name3', 'Name1')的案例吗?如果有,将如何处理?

标签: arrays perl hash naming-conventions


【解决方案1】:

这将创建一个带有以所提供列表的元素命名的键的散列:

my @list=('Name1','Name2','Name3');
my %hash;
@hash{@list}=()x3;

根据您的评论,以下是更新:

所以现在您可以考虑它们,就好像您有 3 个哈希引用一样,您可以按照以下示例填充它们,我们将 keyvalue 添加到 hashref Name2

$hash{'Name2'}->{'key'}='value';

【讨论】:

  • 但它应该是哈希的名称,我想创建:%Name1、%Name2、%Name3,然后再使用列表的索引以某种方式添加键和值 - 是这样不可能?还是我应该只做一个哈希数组?
  • 哦,好的,现在我明白了。使用符号引用在字符串后命名变量是可行的,但这绝对不是一个好主意。您的问题已经得到解答,例如:stackoverflow.com/questions/3871451/…
  • 听从以上链接中思南Ünür的建议。并且只需创建一个哈希,其键将是数组的元素,它们的值将是哈希引用。
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多