麻烦将哈希和变量传递给子例程

时间:2014-03-14 20:41:47

标签: perl subroutine

我想将哈希和变量传递给子例程:

%HoA = {'1'=>'2'};
my $group_size = 10;

&delete_unwanted(\%HoA,$group_size);

sub delete_unwanted {
    my (%HoA,$group_size) = @_;
    print "'$group_size'\n"
}

但是,这并没有打印出来。

2 个答案:

答案 0 :(得分:5)

您正在传递哈希引用(如您所愿),因此请将其分配给参数catch中的标量:

sub delete_unwanted {
    my ($hashref, $group_size) = @_;

    print "'$group_size'\n"
}

如果您以后想要取消引用它,您可以my %newHoA = %$hashref;,但这将是原始哈希的副本。要访问原始结构,只需使用参考:print $hashref->{a_key};

答案 1 :(得分:1)

您的问题出在:

my (%HoA,$group_size) = @_;

你可以通过说,例如:

来解决它
sub delete_unwanted {
    my $hashPointer = shift;
    my $group_size = shift

请注意,您可以通过以下任一方式检索子例程中的原始哈希:取消引用hashPointer(我的%HoA =%$ hashPointer),或者您可以直接使用指针直接访问哈希内容(例如,$ hashPointer- > {'键'})