交换两个标量值非常简单,例如:
($ours, $theirs) = ($theirs, $ours);
那么,我该如何使用数组变量来实现这个呢?
# (@ours, @theirs) = (@theirs, @ours); # XXX
# lame
my @tmp = @ours;
@ours = @theirs;
@theirs = @tmp;
关于逻辑的一些内容
@ar = qw(one two three four);
@br = (1..5);
unshift(@ar,@br);
@br = splice(@ar,scalar @br);
print "@ar\n@br\n";
由于数组被展平,所以无法进行数组交换。 (@ar,@br)=(@br,@ar)
实际上,您正在创建一个新列表,该列表的元素来自两个数组。最终,您将得到一个列表。这个列表数据会覆盖第一个数组(@ar)。第二个数组应该为空(@br)。
(@ours, @theirs)
并期望@theirs
得到任何东西。换句话说......您无法将“数组”传递给子例程。在Perl中,子程序只能接收0个或更多标量的列表。for my $i (0 .. $#ours) {
( $ours[$i], $theirs[$i] ) = ( $theirs[$i], $ours[$i] );
}
(\@ours, \@theirs) = (\@theirs, \@ours);
use v5.22;
use warnings;
use feature 'refaliasing';
no warnings 'experimental::refaliasing';
use v5.22;
use warnings;
use experimental 'refaliasing';