しばらく前に、私は質問をします:How do I redefine built in Perl functions?Perlで 'open'を正しく再定義できますか?
そして私の答えは私によく役立ちました。私はPerlの「オープン」機能を無効にするパッケージを持っていて、ファイルへのアクセスをログに記録することができます。
ここでは、元のコードの機能を壊すケースがあります。
use strict;
use warnings;
use Data::Dumper;
sub myopen (*;@) {
my $p;
my $retval = CORE::open($p, $_[1]);
{
no strict;
*{"main::$_[0]"} = $p;
}
return $retval;
}
BEGIN {
*CORE::GLOBAL::open = *myopen;
};
my @a = (1, 2, 3);
open(CHECK, ">dump") or print "UNABLE TO OPEN DUMPER FILE: $!\n";
print CHECK "test\n";
print CHECK Data::Dumper->Dump(\@a);
close CHECK
は今、私はこのメッセージが表示されます。
Can't locate object method "CHECK" via package "Data::Dumper"
は、私はそれをどのように修正すればよいですか?
完全なエラーの場合は、間違ったオブジェクトに対してインダイレクトオブジェクト構文を使用しています。 CHECK-> print(...)を試して、同じエラーが発生するかどうかを確認してください。 – Anonymous