[perl] Perl에서 @_의 의미는 무엇입니까?

@_Perl에서 의 의미는 무엇입니까 ?



답변

perldoc perlvar 는 특별한 이름의 Perl 변수 정보를 확인하는 첫 번째 장소입니다.

인용 :

@_: 서브 루틴 내에서 배열 @_은 해당 서브 루틴에 전달 된 매개 변수를 포함합니다.

자세한 내용은 perlvar에서 링크 된 perldoc perlsub (Perl 서브 루틴) 에서 찾을 수 있습니다 .

전달 된 인수는 배열에 표시됩니다 @_.

따라서 두 개의 인수가있는 함수를 호출하면 해당 인수가 $_[0]및에 저장됩니다 $_[1].

배열 @_로컬 배열 이지만 해당 요소는 실제 스칼라 매개 변수의 별칭입니다 . 특히 $ _ [0] 요소가 업데이트되면 해당 인수가 업데이트됩니다 (또는 업데이트 할 수없는 경우 오류가 발생 함).

인수가 함수가 호출 될 때 존재하지 않았던 배열 또는 해시 요소 인 경우 해당 요소는 수정되거나 참조를 가져올 때만 생성됩니다. (Perl의 일부 이전 버전은 요소가 할당되었는지 여부에 관계없이 요소를 생성했습니다.) 전체 배열에 할당하면 해당 별칭이 제거되고 인수는 업데이트되지 않습니다.


답변

일반적으로 변수를 사용하여 하위에 전달 된 매개 변수를 확장합니다 @_.

sub test{
  my ($a, $b, $c) = @_;
  ...
}

# call the test sub with the parameters
test('alice', 'bob', 'charlie');

이것이 perlcritic 이 옳다고 주장하는 방식 입니다.


답변

에 대한 첫 번째 검색 결과perl @_다음과 같습니다.

@_는 서브에 들어오는 매개 변수의 목록입니다.

또한 동일에 대한 더 길고 자세한 설명이 있습니다.


답변

질문은 Perl에서 @_ 의미하는 것 입니다. 인 한, 그 질문에 대한 대답은, 그 인 $_수단 Perl로, @_유사 의미 그들은을 .

아무도의 중요한 측면 언급 한 것 같다 뿐만 아니라 – 의미를 그들의 .

결과적으로 둘 다 대명사로 사용되거나 때로는 국소화 제로 사용됩니다.

항상 그런 것은 아니지만 일반적으로 명목상의 선행이 있습니다.


답변

대부분의 경우 개별 변수에 대해 시프트를 사용할 수도 있습니다.

$var1 = shift;

Perl은 하위 루틴 내부의 외부 정보에 액세스하는 여러 가지 흥미로운 방법을 가지고 있으므로이 주제에 대해 자세히 조사해야합니다.


답변

모든 Perl의 “특수 변수”는 perlvar 문서 페이지에 나열되어 있습니다.


답변

또한 함수가 배열을 반환하지만 반환 된 데이터를 아래와 같은 변수에 할당하지 않고 함수가 호출되는 경우에도 마찬가지입니다. 여기서 split ()이 호출되지만 어떤 변수에도 할당되지 않습니다. 나중에 @_를 통해 반환 된 데이터에 액세스 할 수 있습니다.

$str = "Mr.Bond|Chewbaaka|Spider-Man";
split(/\|/, $str);

print @_[0]; # 'Mr.Bond'

이것은 문자열을 분할 $str하고 배열을 설정합니다 @_.