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 @_
는 다음과 같습니다.
@_는 서브에 들어오는 매개 변수의 목록입니다.
또한 동일에 대한 더 길고 자세한 설명이 있습니다.
모든 Perl의 "특수 변수"는 perlvar 문서 페이지에 나열되어 있습니다.
대부분의 경우 개별 변수에 대해 시프트를 사용할 수도 있습니다.
$var1 = shift;
Perl은 하위 루틴 내부의 외부 정보에 액세스하는 여러 가지 흥미로운 방법을 가지고 있기 때문에이 주제를 더 연구해야합니다.
또한 함수가 배열을 반환하지만 반환 된 데이터를 아래와 같은 변수에 할당하지 않고 함수가 호출되는 경우에도 마찬가지입니다. 여기서 split ()이 호출되지만 어떤 변수에도 할당되지 않습니다. 나중에 @_를 통해 반환 된 데이터에 액세스 할 수 있습니다.
$str = "Mr.Bond|Chewbaaka|Spider-Man";
split(/\|/, $str);
print @_[0]; # 'Mr.Bond'
이것은 문자열을 분할 $str
하고 배열을 설정합니다 @_
.
@
배열에 사용됩니다.
서브 루틴에서 또는 Perl에서 함수를 호출 할 때 매개 변수 목록을 전달할 수 있습니다. 이 경우 @_
is를 사용하여 매개 변수 목록을 함수에 전달할 수 있습니다.
sub Average{
# Get total number of arguments passed.
$n = scalar(@_);
$sum = 0;
foreach $item (@_){
# foreach is like for loop... It will access every
# array element by an iterator
$sum += $item;
}
$average = $sum / $n;
print "Average for the given numbers: $average\n";
}
함수 호출
Average(10, 20, 30);
위의 코드를 살펴보면 다음 foreach $item(@_)
줄을 참조하십시오 . 여기에서 입력 매개 변수를 전달합니다.
Never try to edit to @_ variable!!!! They must be not touched.. Or you get some unsuspected effect. For example...
my $size=1234;
sub sub1{
$_[0]=500;
}
sub1 $size;
Before call sub1 $size contain 1234. But after 500(!!) So you Don't edit this value!!! You may pass two or more values and change them in subroutine and all of them will be changed! I've never seen this effect described. Programs I've seen also leave @_ array readonly. And only that you may safely pass variable don't changed internal subroutine You must always do that:
sub sub2{
my @m=@_;
....
}
assign @_ to local subroutine procedure variables and next worked with them. Also in some deep recursive algorithms that returun array you may use this approach to reduce memory used for local vars. Only if return @_ array the same.
참고URL : https://stackoverflow.com/questions/4563485/what-is-the-meaning-of-in-perl
'IT story' 카테고리의 다른 글
간단한 "추가"요소 목록이있는 사용자 지정 app.config 섹션 (0) | 2020.09.18 |
---|---|
MySQL에서 특정 테이블 만 덤프하는 방법은 무엇입니까? (0) | 2020.09.18 |
Visual Studio의 느린 디버깅 문제 (0) | 2020.09.17 |
유사 절 JPQL의 매개 변수 (0) | 2020.09.17 |
Rails 콘솔 / irb 출력을 억제하는 방법 (0) | 2020.09.17 |