Thread Variable _ ?
(52 answers)
Opened by bianca at 2020-12-25 10:24 2020-12-28T08:52:06 biancaDas vermute ich auch. 2020-12-28T08:52:06 biancaDas fängst Du Dir mit require ein, dass je nach Aufrufreihenfolge der erste Modul, der drankommt, drüberfällt. Man kann auch feststellen, wenn was überschrieben wird, aber dazu braucht's natürlich schon etwas Gewissheit, ob die Theorie mit stat überhaupt stimmt. Dazu kannst Du einen Kanarienvogel einbauen. ![]() ![]() Code (perl): (dl
)
1 2 3 4 5 6 use Sub::Util; use Variable::Magic qw<wizard cast>; my $wiz = wizard (set => sub { print "stat ist nun ", Sub::Util::subname(\&CORE::GLOBAL::stat), "\n" }); cast *CORE::GLOBAL::stat,$wiz; Anstelle des print solltest Du irgendetwas setzen, dessen Ausgabe Du mitbekommst. Wenn nun ein Perl-Modul die eingebaute stat-Funktion mit "normalen Mitteln" redefiniert, dann bekommst Du - vielleicht - raus, in welchem Modul das passiert. Wenn da rauskommt stat ist nun StatSplatter::__ANON__, dann weißt Du, dass im Modul StatSplatter (das ich für meine Tests grade erfunden habe) eine anonyme Funktion eingesetzt wurde. Wenn Du keine Ausgabe bekommst und Dein Programm trotzdem stirbt... ja dann ist entweder die ganze Theorie Humbug oder jemand hat mit anderen Mitteln (XS) die Funktion überschrieben. 2020-12-28T08:52:06 biancaDas Problem bei require ist, dass es erst zur Laufzeit stattfindet. Dadurch wird die Fehlersuche schwieriger, weil alle möglichen Komponenten irgendwo was rumdoktorn können. Ich vermute, ein Autor eines der der zig Module meinte tatsächlich, da etwas Gutes zu tun und hat nicht ausreichend getestet. Dein Intranet läuft ja anscheinend unter Windows? Hintergrund: stat kann unter Windows systembedingt nicht das gleiche tun wie unter Linux, vielleicht hat da ein Modul schlampig verschlimmbessert. Wenn Du sonst immer und an jeder Stelle require nutzt, (wozu soll das denn eigentlich gut sein?), dann sollte es ausreichen, require Archive::Zip durch use Archive::Zip zu ersetzen. 2020-12-28T08:52:06 biancaWeil stat eine eingebaute Funktion ist. Die kann man auch gar nicht so einfach überschreiben. Wenn Du in einem Modul ein sub stat { ...; } definierst und dann stat aufrufst, wird trotzdem die eingebaute Funktion verwendet. 2020-12-28T08:52:06 biancaGern geschehen. Im Lockdown hat man eh' nicht viel anderes zu tun :) |