在test.pl第10行使用“strict refs”时,不能使用字符串(“VIEW_hash”)作为HASH引用

时间:2011-09-19 09:47:51

标签: perl hash

嗨我真的需要一个变量作为哈希名称。但我得到了这个错误。有人可以帮忙??

#!/usr/bin/perl -w

use strict;

my %VIEW_hash = ( 'a' => 'A', 'b' => 'B', 'c' => 'C');
my $X = "VIEW";
my $name = "$X"."_hash";

foreach my $in (keys %$name){
    print "$in -- $$name{$in}\n";
}

2 个答案:

答案 0 :(得分:5)

我怀疑你真的需要这样做。最有可能的是,你只是想破坏规则,因为你不知道更好的方法。

考虑使用哈希来存储实际数组的文本链接:

my %VIEW_hash = ( 'a' => 'A', 'b' => 'B', 'c' => 'C');
my $X = "VIEW";
my $name = "$X"."_hash";

# Our new code
my %meta = ( "VIEW_hash" => \%VIEW_hash );
my $href = $meta{$name};

say @$href{"a".."c"};
say $href->{a}

答案 1 :(得分:2)

我改变了一些东西,但这可能符合你的需要。

首先,您必须使用no strict 'refs' pragma,才能使用符号引用。然后你必须从词法变量切换到包变量(用our定义)。

我选择将无约束区域的扩展限制为用花括号括起来的块:它可能会在将来为您节省一些麻烦。

#!/usr/bin/perl -w

use strict;
{
    no strict 'refs';
    our %VIEW_hash = ( 'a' => 'A', 'b' => 'B', 'c' => 'C');
    my $X    = 'VIEW';
    my $name = "$X".'_hash';

    foreach ( keys %$name ) {
        printf "%s -- %s\n", $_, $$name{ $_ };
    }
}