如何在Perl中打印哈希名称?

时间:2012-08-10 17:53:38

标签: perl

有点简单的问题,但它让我难倒,谷歌只是让我误入歧途。我想要做的就是打印出哈希的名称。例如:

&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”标记来获取哈希名称(如果您想将其称为哈希名称)。我无法弄清楚如何获得整个哈希名称,看起来它真的只是另一个关键。

4 个答案:

答案 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);),尽管这是完全不同的事情。