2017-11-16 17 views
-1

$val = ref($something)의 값을 테스트하는 복잡한 Perl 코드가 있습니다. 불행히도 $val"ARRAY(0x913310)"이고 "ARRAY"이 아닌 상황이 있기 때문에 (Perl 디버거에 따라) 내 코드가 실패합니다.

ref()의 설명서를 읽으면 해당 값이 가능한 반환 값 중 하나로 나열되지 않습니다. 또한, 디버거에서 대화 형으로 재현하려고하면 유효한 반환 값만 표시됩니다.

이것은 펄 기반의 버그 일 수 있습니까? x86_64의 SLES 11 SP 4에서 Perl 5.10.0을 사용 중입니다 ...

+1

당신은 당신이''$ OBJ, REF ($의 발을) 축복 말을 의미하는 곳과 같은 호출이'어딘가에 $ OBJ, $ val'을 축복 했습니까? – mob

+1

Perl 5.10.0 [거의 10 년 동안] (http://perldoc.perl.org/perlhist.html) 2009 년에는 하나의 마이너 릴리스 5.10.1이있었습니다. 이와 같은 것은 거의 없을 것입니다. 펄 자체의 버그. 그것은 당신이 뒤죽박죽 된 실수를 범했을 가능성이 더 큽니다. ;) – simbabque

답변

4

ARRAY(0x913310)의 객체 인 경우.

$ perl -E' 
    my $class = "".[]; 
    say $class; 
    my $o = bless({}, $class); 
    say ref($o); 
' 
ARRAY(0x115e360) 
ARRAY(0x115e360) 
+0

문제가 발견되었습니다 : 실제로 어떤 서브 루틴이 배열 참조를 반환하고 개별 사례를 확인하기 전에 반환 값에'ref()'함수를 적용하지 않았습니다. * mea culpa! *, 죄송합니다! –