前段時間,我問一個問題: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"
如何解決呢?
如果這是完全錯誤,那麼它會在錯誤的對象上使用非直接對象語法。嘗試檢查 - >打印(...),看看你是否得到相同的錯誤。 – Anonymous 2009-05-02 00:18:23