2011-09-05 4 views
4

기본 클래스가 Net::SSH2 인 하위 클래스를 만듭니다. 내가 클래스 변수를 추가하려고 할 때 내가 말하는 오류를 얻고있다 -Perl - 하위 클래스의 클래스 변수를 만들 수 없습니다.

하지 F에서 HASH 참조 : \ 임시 \의 fooA.pl 라인 (17)

내가 같은 일을 할 경우 wihtout Net::SSH2 다음 잘 작동합니다.

use strict; 

my $x = Foo->new(); 

package Foo; 

use base qw (Net::SSH2); 

sub new { 
    my ($class, %args) = @_; 

    my $self = $class->SUPER::new(%args); 
    $self->{'key'} = 'value'; 
    bless $self, $class; 
    return $self; 
} 

답변

5

그것은 간단합니다 : 인터넷 : SSH2는 해시 심판을 반환 나던하지만, 축복 스칼라 : BTW

use Scalar::Util qw(reftype); 
print reftype($self) . "\n"; # SCALAR 

: 여기

코드입니다 그것은 구현에 의존하는 것이 위험 제 3 자 코드의 세부 사항.

가능한 솔루션이 객체에서 내부 사용하는 것입니다 :

package Foo; 

use Scalar::Util qw(refaddr); 
use base qw(Net::SSH2); 

my %keys; 

sub new { 
    my ($class, %args) = @_; 

    my $self = $class->SUPER::new (%args); 

    $keys{ refaddr ($self) } = 'value'; 

    bless $self, $class; 
    return $self; 
} 
+0

... 아니면 그냥'$ 셀프 -> { '슈퍼'} = $ 클래스 -> SUPER :: 새로운 (%의 인수)' – tripleee

관련 문제