Home > Perl > lvalue がデバッグモードで正しく動作しない

lvalue がデバッグモードで正しく動作しない

  • 2006-04-25 (火)
  • Perl
  • このエントリーを含むはてなブックマーク

参考document: perldoc attributes /lvalue

関数用の built-in attributes に lvalue ってのがあります:

sample.pl

use strict;
package FooClass;
sub new {
    return bless({
        prop => 'orginal'
    },shift);
}
sub prop : lvalue {
    shift->{prop};
}

package main;
my $obj = FooClass->new();
print "$obj->{prop}\n";
$obj->prop = 'modified';
print "$obj->{prop}\n"; 

実行結果

$ perl sample.pl
orginal
modified

インスタンスプロパティを左辺値として使えるようになるのでちょっといいかなと思っていたんですけど、落とし穴を見つけたっぽいです。

perl debug モードだと正しく動作しない

参考document: perldoc perldebug

ステップイン/アウト、ブレークポイントを使って華麗にスクリプトのデバッグが可能な -d モードで同スクリプトを動かすと、lvalue attribute がうまく動作しません。左辺値として機能しないようです。※ perl 5.8.4 と 5.8.5 で動作確認済み

先ほどのサンプルコード sample.pl をデバッグモードで実行:

$ perl -d sample.pl

Loading DB routines from perl5db.pl version 1.25
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(sample.pl:14):    my $obj = FooClass->new();
  DB<1> n
main::(sample.pl:15):    print "$obj->{prop}\n";
  DB<1> n
orginal
main::(sample.pl:16):    $obj->prop = 'modified';
  DB<1> n
main::(sample.pl:17):    print "$obj->{prop}\n";
  DB<1> n
orginal

俺の凡ミスじゃね?

こんな判り易いバグを世の perl hacker な方々が放置しておくはずが無いと思います。でも google で 'perl lvalue debug' とかで探しても、目立った報告記事やらが見つかりませんでした(俺の検索能力がイケてない?) 。

こういう時は perl mongers mailing list なり cpan 系 mailing list に聞いてみればいいの?てか俺の凡ミスなの?よーわからん、てな感じでこうしてブログにポストしてみた次第。 素敵な perl monk が反応してくれたら嬉しいな。

やはりバグな模様 (04/28追記)

はてなブックマークにて charsbar さんからコメント貰いました:

http://search.cpan.org/~domizio/OOTools-2.21/lib/Class/props.pm のKNOWN ISSUEでも紹介されていますね

このリンク先をきっかけに、色々情報漁っていった結果、perl 自身のドキュメントにも記述がある事が確認できました:

5.8.8 perltodo

LVALUE functions in the debugger
The old perltodo notes that lvalue functions don't work in the debugger. This would be good to fix.

charsbarさんコメント感謝ですー。※検索語 ' perl lvalue debug' では何も見つからなかったものの、 'perl lvalue debugger' だと大漁にヒットする罠 orz

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Home > Perl > lvalue がデバッグモードで正しく動作しない

Search
Feeds

Page Top