有点简单的问题,但它让我难倒,谷歌只是让我误入歧途。我想要做的就是打印出哈希的名称。例如:
&my_sub(\%hash_named_bill);
&my_sub(\%hash_named_frank);
sub my_sub{
my $passed_in_hash = shift;
# do great stuff with the hash here
print "You just did great stuff with: ". (insert hash name here);
}
我不知道的部分是如何在括号中插入内容(插入...)。对于嵌套哈希,您只需使用“keys”标记来获取哈希名称(如果您想将其称为哈希名称)。我无法弄清楚如何获得整个哈希名称,看起来它真的只是另一个关键。
答案 0 :(得分:9)
正如@hackattack在评论中所说,问题的技术答案可以在Get variable name as string in Perl
的答案中找到。但是,你应该考虑一下你做得对吗?
如果您需要知道哈希的名称,那么最有可能可以更好地解决问题,如果您将这些多个哈希值存储到名称为键的哈希哈希值(其中)当你提到问题中的方法时,你应该熟悉。
答案 1 :(得分:2)
$hash_named_bill{name} = "bill";
$hash_named_frank{name} = "frank";
&my_sub(\%hash_named_bill);
&my_sub(\%hash_named_frank);
sub my_sub{
my $passed_in_hash = shift;
# do great stuff with the hash here
print "You just did great stuff with: ". $passed_in_hash->{name};
}
答案 2 :(得分:2)
您可以使用名称来引用哈希,但哈希本身没有名称。例如,请考虑以下事项:
*foo = {};
*bar = \%foo;
$foo{x} = 3;
$bar{y} = 4;
请记住哈希包含(x=>3, y=>4)
:哈希是否无名?名为'foo'?名为'酒吧'?上述所有的?以上都不是吗?
您可以做的最好的事情是使用PadWalker来回答答案。我建议不要在制作中使用它或类似的东西(即任何找到名字的东西)!
答案 3 :(得分:1)
哈希只是一块内存,一个名称(或多个)可以与之关联。
如果你想打印变量的名称,那不是很简单(参见haccattack评论),并且闻起来不太好(你确定你真的需要吗?)
您也可以(如果这符合您的情况)考虑“软(或符号)引用”:
%hash1 = ( x => 101, y => 501);
%hash2 = ( x => 102, y => 502);
my_sub("hash1");
#my_sub(\%hash1); # won't work
my_sub("hash2");
sub my_sub {
my $hashname = shift;
print "hash name: $hashname\n";
print $hashname->{x} . "\n";
}
在这里,您将函数的名称传递给函数,而不是(硬)引用它。请注意,在Perl中,在解除引用时感觉相同(尝试取消注释my_sub(\%hash1);
),尽管这是完全不同的事情。