printem([@list1], [@list2]);
actually creates two anonymous arrays and copy data in memory, while
printem(\@list1, \@list2)
will pass references to the original arrays.
Copying data will prevent accidental changes of the original arrays but may be quite long and memory-hungry if the copied data is big...
Here's a small sample to picture the difference :
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @list1 = qw(a b c);
my @list2 = qw(d e f);
sub sem {
my $list1 = shift or die "no list1";
my $list2 = shift or die "no list2";
$list1->[0]='x';
@{$list2}=qw(D E F);
}
# print original data
print "list1: " . Dumper(@list1);
print "list2: " . Dumper(@list2);
# call with copy
sem([@list1], [@list2]);
print "list1: " . Dumper(@list1);
print "list2: " . Dumper(@list2);
# call by reference
sem(\@list1, \@list2);
print "list1: " . Dumper(@list1);
print "list2: " . Dumper(@list2);
|