将数组和变量传递给Perl中的函数

use*_*541 0 perl

我有一个问题将数组和变量传递给函数.例如,我有以下内容.

 my @the_array = ("hello", "hey");
 CallFunction(@the_array, "random")


 sub CallFunction{
     my (@array_ref, $ran_variable) = @_;

     foreach $element (@array_ref){
         print $element ."\n";
     }
 }
Run Code Online (Sandbox Code Playgroud)

我想要以下输出

hello
hey
Run Code Online (Sandbox Code Playgroud)

但是我在输出中得到了另一个变量,我不知道为什么.

hello
hey
random
Run Code Online (Sandbox Code Playgroud)

Mil*_*ler 5

以下赋值将把参数列表中的所有值@_放入@array_ref:

my (@array_ref, $ran_variable) = @_;
Run Code Online (Sandbox Code Playgroud)

你有两个选择.

  1. 重新排序参数的传递,以便数组在最后:

    my @the_array = ( "hello", "hey" );
    CallFunction( "random", @the_array );
    
    sub CallFunction {
        my ( $ran_variable, @array ) = @_;
    
        for my $element (@array) {
            print $element . "\n";
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者通过引用传递数组:

    my @the_array = ( "hello", "hey" );
    CallFunction( \@the_array, "random" );
    
    sub CallFunction {
        my ( $arrayref, $ran_variable ) = @_;
    
        for my $element (@$arrayref) {
            print $element . "\n";
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

次要注意 - 命名正常数组@array_ref有点令人困惑.保存ref实际持有引用的变量的后缀.