나는 문맥을 호출하는 것에 달려있는 함수를 가지고 있는데이 함수를 다른 함수의 인자로 사용하고 싶었다. 놀랍게도이 second
함수가 목록 컨텍스트에서 호출되었음을 발견했습니다. +()
과 강제 스칼라 컨텍스트를 시도했지만 예상대로 작동하지 않습니다. 따라서 암시 적으로 scalar
으로 호출하는 것이 유일한 방법입니다.함수 인수가 목록 컨텍스트를 유도하는 이유는 무엇입니까?
use 5.010;
say first(1, second('y'));
say first(1, +(second('y')));
say first(1, scalar second('y'));
sub first {
my $x = shift;
my $y = shift;
return "$x + $y";
}
sub second {
my $y = shift;
if (wantarray) {
qw/ array array /;
} else {
'scalar';
}
}
__END__
1 + array
1 + array
1 + scalar
함수의 인수는 목록으로 취급되지만 해당 목록의 모든 인수도 목록 컨텍스트를 의미합니까? 그렇다면 왜?
그리고, scalar
의 작품을 사용하지만 다른 방법으로 나는 중간 변수가없는 스칼라 컨텍스트에서이 함수를 호출해야합니까?
내 대답에 추가되었습니다. – ikegami
물론 목록의 모든 구성원도 목록 일 수 있으므로 선택의 여지가 많지 않습니다. 생각하지 않았어. 고맙습니다! –