Perl 函数:接受哈希、数组或标量作为参数

Ani*_*han 2 perl reference parameter-passing

我有以下子例程。

 sub Function{
   my $ref = \($_[0]);
   if(ref($ref) eq 'SCALAR'){
   . . .
   }
}
Run Code Online (Sandbox Code Playgroud)

我试图让它工作,以便将列表、标量或散列传递给它,它将其转换为引用,并根据该引用的类型是否为ARRAYSCALARHASH执行不同的操作。

它可以被称为

Function(%a)
Function($a)
Function(@a)
Run Code Online (Sandbox Code Playgroud)

我如何才能$ref引用传递给 的任何内容Function?我目前的方法不起作用。

Don*_*oma 5

Function(%a)
Function($a)
Function(@a)
Run Code Online (Sandbox Code Playgroud)

你不能做你所要求的。内部无法Function确定是否传递了数组或散列,因为事实上,您一开始就无法将数组或散列传递给子函数。你只能传递一个列表;哈希值和数组在上面的子调用中转换为列表。

您应该首先传递对该函数的引用:

Function(\%a)
Function($a)
Function(\@a)
Run Code Online (Sandbox Code Playgroud)

然后你可以轻松检查它是什么:

sub Function {
  my $param = shift;
  if (not ref $param) {
     ...
  } elsif (ref $param eq 'HASH') {
     ...
  } elsif (ref $param eq 'ARRAY') {
     ...
  }
Run Code Online (Sandbox Code Playgroud)