Perl에서 shift ()는 무엇을합니까?
다음 줄은 무엇을 의미 할 수 있습니까?
my $x = shift;
shift()
배열을 인수로 취한 다음 해당 배열의 첫 번째 항목을 반환하고 삭제하는 내장 Perl 서브 루틴입니다. shift
호출 과 함께 서브 루틴에 전달 된 모든 매개 변수를 얻는 것이 일반적 입니다. 예를 들어, foo
세 개의 인수를 사용 하는 서브 루틴 이 있다고 가정하십시오 . 이러한 매개 변수를 지역 변수에 할당하는 한 가지 방법은 다음과 shift
같습니다.
sub foo() {
my $x = shift;
my $y = shift;
my $z = shift;
# do something
}
여기서 혼란은 shift가 배열을 인수로 전달하지 않는 것처럼 보인다는 것입니다. 실제로 @_
서브 루틴 내부 또는 서브 루틴 @ARGV
외부에있는 "기본"배열을 암시 적으로 전달하고 있습니다.
이 shift
함수는 배열에서 첫 번째 요소를 제거하고이를 반환합니다. 배열은 하나의 요소로 단축됩니다.
기본 배열 (매개 변수로 지정되지 않은 @_
경우 )은 함수에 있거나 @ARGV
파일 범위에있는 경우입니다.
따라서이 경우 $x
에는 첫 번째 함수 매개 변수 또는 첫 번째 명령 줄 매개 변수로 설정됩니다.
Perl에서는 인수를 명시 적으로 지정하지 않으면 많은 메서드가 기본 변수 ( $_
및 @_
)를 사용합니다 . 코드는 다음과 동일합니다.
my $x = shift @_;
앞서 PullMonkey에서 지적했듯이 서브 루틴 내에서 해당 서브 루틴에 @_
전달 된 인수를 포함합니다 (에서 설명 perlsub
). shift
에서 첫 번째 인수 값을 제거 @_
하고에 저장 $x
하므로 $_[0]
이제 서브 루틴에 전달 된 두 번째 인수를 제공합니다.
이것은 일반적으로 관용구입니다. $ x는 서브 루틴에 전달 된 첫 번째 매개 변수에 할당 된 지역 변수입니다.
my ($x) = @_;
아마도 더 명확 할 것입니다 (인수 목록을 수정하지 않음).
평신도의 언어에서 매우 높은 수준의 관점에서 시프트 는 배열의 첫 번째 요소 (가장 왼쪽 부분)를 취하는 반면 반대는 배열의 마지막 요소 (가장 오른쪽 부분)를 취하는 팝 입니다.
내 @ array1 = (5,6,7,8,9); 내 $ x = 시프트 @ array1; print "$ x \ n"; # 5 print "@ array1 \ n"; # 678 9
서브 루틴에있는 경우이 행이 shift
켜집니다 @_
(전달되는 매개 변수).
그래서 $x
첫 번째 항목이 될 것이다 popped
로부터 @_
배열입니다.
그래서 보통 당신은 볼 것입니다 $x = shift if @_;
참고 URL : https://stackoverflow.com/questions/296964/what-does-shift-do-in-perl
'Program Tip' 카테고리의 다른 글
MongoDB에서 "id"와 "_id"필드의 차이점 (0) | 2020.11.15 |
---|---|
소켓 대 SocketChannel (0) | 2020.11.15 |
IntelliJ IDEA 용 Visual Studio ReSharper 키맵 (0) | 2020.11.15 |
D3로 "실시간"그래프 생성 (0) | 2020.11.15 |
Jasmine과 함께 작동하도록 requirejs 얻기 (0) | 2020.11.15 |