如何使用变量名引用散列?

How can I reference a hash using a variable name?

我有一组预定义的哈希表,我想使用变量名引用其中一个哈希表并访问键值。即使填充了散列,以下代码也只是 returns null。我在这里做错了什么,或者有更好的方法来实现这个目标吗?

my %TEXT1 = (1 => 'Hello World',);
my %TEXT2 = (1 => 'Hello Mars',);
my %TEXT3 = (1 => 'Hello Venus',);

my $hash_name = 'TEXT1';

my $hash_ref = \%$hash_name;
print ${$hash_ref}{1};  #prints nothing

以下代码是对标量而非散列的赋值:

my $hash_name = 'TEXT';

以下代码是对哈希的赋值:

my %hash = ( alpha => 'beta', gamma => 'delta' );

要打印散列中单个元素的值,您说:

print $hash{alpha}, "\n";

您可以引用该散列并将其分配给变量:

my $hashref = \%hash;

然后您可以从该 hashref 打印单个元素:

print $hashref->{alpha}, "\n";

您的代码工作正常*

%TEXT = (1 => abc, 42 => def);
$name = 'TEXT';
print ref($name);         #  ""
no strict 'refs';
print ${$name}{1};        #  "abc"
print $name->{42}         #  "def"
$ref = \%$name;
print ref($ref);          #  "HASH"
print $ref->{1};          #  "abc"
print ${$ref}{42};        #  "def"

你做错的主要是making your code an unmaintainable mess,这就是为什么在use strict 'refs'.

下不允许这种事情的原因

* - 除非你是 use strict 'refs' 下的 运行,否则你应该是

使用散列来包含您的散列。

my %texts = (
    TEXT1 => { 1 => 'Hello world', },
    TEXT2 => { 1 => 'Hello Mars', },
    TEXT3 => { 1 => 'Hello Venus', },
)

my $hash_name = 'TEXT1';

print $texts{$hash_name}{1}, "\n";