객체를 인스턴스화하지 않고 클래스에서 프로토 타입 함수를 호출하려고합니다. 내 수업 MyClass
의 예 :클래스의 Perl 프로토 타입 서브 루틴
package MyClass;
use strict;
use warnings;
sub import{
my $class = shift;
my ($caller) = caller();
eval "sub ${caller}::myprot(\&);";
eval "*${caller}::myprot = \&MyClass::myprot;";
}
sub myprot (&) {
my ($f) = @_;
$f->();
}
1;
나는 스크립트 main.pl
에서 프로토 타입을 호출 할 :
use strict;
use warnings;
use MyClass;
myprot {
print "myprot\n";
};
와 나는 오류가 점점 오전 :
Use of uninitialized value in subroutine entry at MyClass.pm line 14.
Use of uninitialized value in subroutine entry at MyClass.pm line 14.
Undefined subroutine &main::myprot called at main.pm line 8.
그렇게하지를 정의되지 않은 서브 루틴 오류를 실제로 이해합니다. use
을 사용하면 main.pl
의 프로토 타입을 정의하는 import
이 호출됩니다. 나는 또한 실제로 초기화되지 않은 값 오류를 이해하지 못한다. 나는 약간 설명을 위해 행복 할 것이다.
'myprot (sub {print "myprot \ n"});이 필요하다고 생각합니다. myprot을 MyClass 패키지에서 내 보내야합니다. http://stackoverflow.com/questions/17912400/export-vs-export-ok-in-perl – KeepCalmAndCarryOn
@KeepCalmAndCarryOn : 유효하지 않은 Perl - 아마도 괄호'(..)'대신에 중괄호'{..}'를 사용하려는 것 같습니다. 아니요 - 그는 'MyClass'가 유일한 매개 변수로 코드 블록을 사용하는'myprot' 함수를 선언하기를 원합니다. 그러나 나는 그가'sub'가없는 서브 루틴 정의처럼 보이게해서는 안된다는 것에 동의합니다. – Borodin
나는 실제 코드에서 이것을 * 실제로 사용하려고하지 않는다고 믿는다. 내 대답은 왜 그것이 당신을 위해 일하지 않는지 설명하지만, 당신은 *이 바깥의 실험과 같은 것을해서는 안됩니다. – Borodin