在Perl中,如何取消引用作为参数传递的临时哈希?

时间:2018-07-21 17:34:10

标签: perl

在Perl中,如何取消引用作为参数传递给函数的临时哈希?

MyFunct({ 
    Param1 => "knob1",
    Param2 => "knob2"
});

# this part never seems to work...
sub MyFunct {
    my %param = %{shift()};
    my $p1 = $param{Param1};
    print "p1: $p1\n";
}

2 个答案:

答案 0 :(得分:3)

您的代码按原样工作。

$ perl -e'
    MyFunct({
        Param1 => "knob1",
        Param2 => "knob2"
    });

    # this part never seems to work...
    sub MyFunct {
        my %param = %{shift()};
        my $p1 = $param{Param1};
        print "p1: $p1\n";
    }
'
p1: knob1

也就是说,您不必要地复制引用的哈希值。以下是一种更好的方法:

$ perl -e'
    MyFunct({
        Param1 => "knob1",
        Param2 => "knob2"
    });

    sub MyFunct {
        my $param = shift;
        my $p1 = $param->{Param1};
        print "p1: $p1\n";
    }
'
p1: knob1

答案 1 :(得分:2)

除了@ikegami的答案外,我还要补充一点,也许您不需要参考。通过使用隐式参数数组@_,将值作为键/值对传递,可以轻松地将列表转换为哈希。

可以使用箭头=>分隔符或在其位置使用标准逗号,分隔符来执行键/值对。以下是使用箭头的示例。

IDEOne Example

#!/usr/bin/perl

MyFunct( 
  Param1 => "knob1",
  Param2 => "knob2"
);

# this part never seems to work...
sub MyFunct {
  my %param = @_;
  my $p1 = $param{Param1};
  local $\ = "\n";
  print "p1: $p1";
  print "p2: $param{Param2}";
}
相关问题