Practice of Programming

プログラム とか Linuxとかの話題

perl -d のエラー IO::Scalar::FILENO がない

perl -d で、x $var ってやると下記のようなエラーがでました(perl 5.8.7)。

      -> *IO::Scalar::FH
Can't locate object method "FILENO" via package "IO::Scalar" at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 274.
 at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 274
        dumpvar::unwrap('IO::Scalar=GLOB(0x8857458)', 6, -3) called at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 119
        dumpvar::DumpElem('IO::Scalar=GLOB(0x8857458)', 6, -3) called at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 208
        dumpvar::unwrap('FM=HASH(0x8860f5c)', 3, -2) called at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 119
        dumpvar::DumpElem('FM=HASH(0x8860f5c)', 3, -2) called at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 245
        dumpvar::unwrap('ARRAY(0x8bde054)', 0, -1) called at /usr/local/perl5.8.7/lib/5.8.7/dumpvar.pl line 34
        main::dumpValue('ARRAY(0x8bde054)', -1) called at /usr/local/perl5.8.7/lib/5.8.7/perl5db.pl line 5576
        DB::dumpit('GLOB(0x81a3068)', 'ARRAY(0x8bde054)') called at /usr/local/perl5.8.7/lib/5.8.7/perl5db.pl line 657
        DB::eval called at /usr/local/perl5.8.7/lib/5.8.7/perl5db.pl line 3410
        DB::DB called at ./fml.cgi line 14
Debugged program terminated.  Use q to quit or R to restart,
  use O inhibit_exit to avoid stopping after program termination,
  h q, h R or h O to get additional info.  
  DB<2> 

google に聞いたら、dummy のメソッド作ったら?
とか書いてる人がいたので、そうしました。

*{IO::Scalar::FILENO} = sub {};

ExportTo をもっている奇特な人は次のようにかけます。

sub FILENO{}
use ExportTo ("IO::Scalar" => [qw/FILENO/]);

あっ、長くなってら(ぉ
# 右がcode ref なら、左は関数名にしてしまおうかな。


いずれにせよ、うまくいきました(って、これでいいのかは謎ですが、動かなくなるよりだいぶまし)。