func1(func2);
Perl은 평가할 컨텍스트를 알아야하지만 위의 경우 func2
은 스칼라 또는 목록 컨텍스트에 있음을 어떻게 알 수 있습니까?func2는 컨텍스트를 어떻게 알 수 있습니까?
func1(func2);
Perl은 평가할 컨텍스트를 알아야하지만 위의 경우 func2
은 스칼라 또는 목록 컨텍스트에 있음을 어떻게 알 수 있습니까?func2는 컨텍스트를 어떻게 알 수 있습니까?
func1에 프로토 타입 (또는 @
프로토 타입)이 없으면 목록 컨텍스트가됩니다. func1의 프로토 타입이 $
이면 스칼라 컨텍스트가됩니다.
경고 : 프로토 타입을 사용하지 마십시오. evil입니다.
분명히. 그것의 목록입니다.
$ perl
sub f1 { print "called f1\n" }
sub f2 { print "called f2\n"; print wantarray ? "list": "scalar"; print "\n"; }
f1(f2);
^d
called f2
list
called f1
왜? 이것은 또 다른 질문입니다. 함수 매개 변수가 암시 적으로 나열 될 수 있기 때문에 무엇을 기대할 수 있다고 가정합니다.
'func1'에 프로토 타입 (ala'sub func1 ($$$)')을 포함시키지 않는 한 스칼라라고 생각합니다. –
@Ben Jackson : 아니오, 프로토 타입'func2'가 없을 때 호출됩니다. 목록 컨텍스트 - 인수 목록 *의 일부입니다. –