서브 루틴이 메소드 (@ISA 프로빙)로 호출되는지 또는 일반 서브 루틴으로 호출되는지 여부를 판별하는 방법이 있습니까? 아마도 어떤 종류의 확장 모듈 super-caller()? 어떻게 func()
다음과 같은 두 가지 호출을 구별 할 수 Perl에서 서브 루틴이 메소드로 호출되었는지 어떻게 확인할 수 있습니까?
package Ad::Hoc;
sub func() { ... }
을 부여 예를 들어
는 :
Ad::Hoc->func; # or $obj->func
Ad::Hoc::func('Ad::Hoc'); # or func($obj)
(내가 아는 한,이 작업을 수행하는 욕망은 가난한 디자인 ™의 가능성이 표시입니다.)
그러나 메서드가 가변 개수의 인수를 허용하는 경우에만이를 사용해야합니다. 그렇지 않으면 단순히'@ _ '의 크기를 검사 할 수 있습니다. – ikegami
+1 매우 유망한. 'called_as_method()'(5.18.0, PadWalker-1.96, D :: Caller-2.06)로'$ blessed-> func'을 시도하면 치명적인 "pushmark or pad"오류가 발생하지만 "package method"호출 위에서 설명한 것처럼 완벽하게 작동합니다. – pilcrow
@ ikegami, 동의. 이것은 처음부터 허용되어서는 안되는 문제에서 벗어난 기술적 인 호기심입니다. – pilcrow