【问题标题】:Referencing hash keys with a variable in perl在 perl 中使用变量引用哈希键
【发布时间】:2018-10-01 16:33:16
【问题描述】:

我正在尝试创建一个允许我使用变量访问哈希键/值的 Perl 脚本。

下面的代码是一个非常高级的脚本示例。有没有办法用变量引用散列的键?看起来 $hash_exmp{$temp_var} 没有被接受。

my %hash_exmp = (
    $key_1 => "file1",
    $key_2 => "file2",
    $key_3 => "file3",
);

for($i = 1; $i <= 3; $i++){
    for($j = 1; $j <= 3; $j++){     
        print $j;            
        $temp_var = "key_${i}";
        print $hash_exmp{$temp_var};
    };
};

【问题讨论】:

  • 这段代码有很多问题(如果你use strict; use warnings; 会突出显示),这可能解释了你遇到的问题。我不知道它们是否是您真正问题的原因,或者您尝试创建 minimal reproducible example 是否只是显示了一组不同的问题。
  • 您的意思是$key_1 =&gt; "file1" 还是key_1 =&gt; "file1"
  • 如果你尝试使用一个变量来存储一个变量名,那就是abadidea
  • 问题是当我将它们更改为字符串名称时,我的键作为变量它可以工作,谢谢!

标签: perl hash key


【解决方案1】:

如果我正确理解你想要做什么,你想要这样的东西:

my %hash_exmp = (
    'key_1' => "file1",
    'key_2' => "file2",
    'key_3' => "file3",
);
for(my $i = 1; $i <= 3; $i++){
    print $hash_exmp{'key_'.$i} . "\n";
}

【讨论】:

  • for(my $i = 1; $i &lt;= 3; $i++)可以简化为for my $i (1..3)
【解决方案2】:

当我将键更改为字符串名称时,问题是使它们成为变量。换句话说,我从 $key1 => "file1" 更改为 key1 => "file1"

【讨论】:

  • 您可以使用变量作为哈希中的键,my %h = ($key_name =&gt; 1),但该变量必须事先定义 (my $key_name = 'id';),然后将对其进行评估,您的“实际”键是 (本例中的字符串'id')。然后,您也可以使用变量 $h{$var} 来处理它,只要 $var 计算结果为字符串 'id',对于 $h{id} (当它是一个干净的文字时,可能会去掉哈希键的引号)。如果您不知道变量评估为的字符串是否存在键,则可以检查if (exists $h{$var}) ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
相关资源
最近更新 更多