Vor einiger Zeit stelle ich eine Frage: How do I redefine built in Perl functions?Wie kann ich "offen" in Perl neu definieren?
Und die Antworten haben mir gut gedient. Ich habe ein Paket, das die offene Funktion von Perl außer Kraft setzt und es mir ermöglicht, den Dateizugriff zu protokollieren.
Jetzt habe ich auf einen Fall kommen, die die Funktionalität des ursprünglichen Codes bricht. Jetzt
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
ich diese Meldung:
Can't locate object method "CHECK" via package "Data::Dumper"
Wie kann ich das Problem beheben?
Wenn das der vollständige Fehler ist, verwendet es indirect Objektsyntax für das falsche Objekt. Versuchen Sie CHECK-> print (...) und sehen Sie, ob Sie den gleichen Fehler bekommen. – Anonymous