2017-11-16 21 views
-1

$val = ref($something)の値をテストする複雑なPerlコードがあります。残念ながら、$val"ARRAY(0x913310)"であり、"ARRAY"でない状況があるため(Perlデバッガーによると)、私のコードは失敗します。

ref()のドキュメントを読むと、そのような値は考えられる戻り値の1つとして表示されません。また、デバッガで対話的に再現しようとすると、有効な戻り値しか表示されません。

これはPerlベースのバグですか? 私は、x86_64のSLES 11 SP 4からPerl 5.10.0を使用しています...

+1

bless $ obj、ref($ val) 'と言ったところで、' bless $ obj、$ val'のような呼び出しをしましたか? – mob

+1

Perl 5.10.0 [ほぼ10年间](http://perldoc.perl.org/perlhist.html)、2009年には5.10.1のマイナーリリースが1件ありました。このようなことはほとんどありませんPerl自身のバグ。それは、たぶん、複雑なミスをした可能性があります。 ;) – 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!*、申し訳ありません! –

関連する問題