처럼 두 개의 스칼라 값을 교환하는 것이 매우 간단 그것은 tmp` :스왑 두 배열`@
다음($ours, $theirs) = ($theirs, $ours);
, 어떻게 배열 변수를 사용하여이 작업을 수행해야합니까?
# (@ours, @theirs) = (@theirs, @ours); # XXX
# lame
my @tmp = @ours;
@ours = @theirs;
@theirs = @tmp;
처럼 두 개의 스칼라 값을 교환하는 것이 매우 간단 그것은 tmp` :스왑 두 배열`@
다음($ours, $theirs) = ($theirs, $ours);
, 어떻게 배열 변수를 사용하여이 작업을 수행해야합니까?
# (@ours, @theirs) = (@theirs, @ours); # XXX
# lame
my @tmp = @ours;
@ours = @theirs;
@theirs = @tmp;
는 펄은 모든 목록을 평평하게, 당신은 (@ours, @theirs)
에 할당하지 않고 아무것도 얻을 @theirs
을 기대 않을 수 있습니다 목록 할당, 욕심이다. 다른 말로하면 ... 서브 루틴에 '배열'을 전달할 수 없습니다. Perl의 서브 루틴은 0 개 이상의 스칼라 목록 만받을 수 있습니다.
당신은 개별 (스칼라) 루프 내부 배열의 요소를 교환 할 수 있지만,이 두 배열이
for my $i (0 .. $#ours) {
($ours[$i], $theirs[$i]) = ($theirs[$i], $ours[$i]);
}
펄 5.22 허용 reference aliasing라는 실험적인 기능을 소개했다 동일한 길이 있다고 가정 참조에 지정해야합니다. 5.22 이상을 실행하는 경우 실험 기능을 사용하도록 설정 한 다음이 작업을 수행 할 수 있습니다.
(\@ours, \@theirs) = (\@theirs, \@ours);
이 기능을 활성화하고, 실험 기능 사용에 대한 경고를 사용하지 않으려면, 당신은 또한이
use v5.22;
use warnings;
use feature 'refaliasing';
no warnings 'experimental::refaliasing';
을 할 것입니다, 당신
use v5.22;
use warnings;
use experimental 'refaliasing';
에 대한 경고를 처리하는
experimental 모듈을 설치
일부 로직은 무엇입니까
@ar = qw(one two three four);
@br = (1..5);
unshift(@ar,@br);
@br = splice(@ar,scalar @br);
print "@ar\[email protected]\n";
병합으로 인해 어레이 스와핑을 수행 할 수 없습니다. (@ar,@br)=(@br,@ar)
실제로 두 개의 배열에서 오는 요소를 새 목록으로 만듭니다. 마지막으로 하나의 목록이 있습니다. 목록 데이터가 첫 번째 배열 (@ar)로 이동했음을 나타냅니다. 두 번째 배열은 비어 있어야합니다 (@br).