"哈希分配中奇数个元素" - 包含简单示例代码,为什么会发生?

gra*_*tas 0 perl hash

基本上,当我在一个子程序中移动一个哈希值来处理它时,我得到了错误:哈希赋值中奇数个元素.如果我希望将哈希值传递给子例程,我是否应该使用哈希引用?

#!/usr/bin/perl -w
use strict;

my ($a, $b, $c, %hash) = &getVals() ;
&run($a,$b,$c,%hash) ;


sub getVals() {
    $hash{"f"} = "abc" ;
    $a = "A" ;
    $b = "B" ;
    $c = "C" ;
    return ($a, $b, $c, %hash) ;
}


sub run() {
    my $a = shift;
    my $b = shift;
    my $c = shift;
    my %hash = shift; #error here 


    #do stuff here. . . 
}  
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 6

shift从中删除第一个元素@_并将其返回.您可以使用引用,也可以只将整个列表(在移动单个元素之后)分配给哈希:

my %hash = @_;
Run Code Online (Sandbox Code Playgroud)