Pass array and scalar to a Perl subroutine

E.Cross picture E.Cross · May 24, 2012 · Viewed 69.4k times · Source

Possible Duplicate: How do pass one array and one string as arguments to a function?

I have a function, or subroutine, that takes in the first parameter as an array and the second parameter as a scalar. For example,

sub calc {
    my @array = $_[0];
    my $scalar = $_[1];
    print @array, $scalar;
}

The problem is that the function is making the array equal to the first value of the array passed in, and the scalar to be the second value of the array passed in. When I want the first array to be the entire array, I do not need to make a deep copy of the array. For example,

my @array = ('51', 'M');
my $scalar = 21;

and

calc(@array, $scalar)

will print 51 M when I want 51 M 21.

Answer

happydave picture happydave · May 24, 2012

You need to pass it in as a reference:

calc(\@array, $scalar)

And then access it as: my @array = @{$_[0]};