嗨我真的需要一个变量作为哈希名称。但我得到了这个错误。有人可以帮忙??
#!/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";
}
答案 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{ $_ };
}
}