Thread Variable _ ? (52 answers)
Opened by bianca at 2020-12-25 10:24

haj
 2020-12-27 12:29
#193048 #193048
User since
2015-01-07
540 articles
BenutzerIn

user image
2020-12-27T09:05:08 bianca
Ist das Verhalten bei dir/euch anders?
Mit Deinem Code bekomme ich auch die Meldung. Aber "vorher: '"._."'" ist auch etwas anderes als -e _ oder stat (_).

2020-12-27T09:05:08 bianca
Gibt es denn für CPAN:strict einen Schalter, der genau diese Meldung unterdrückt? Würde das Programm ohne die Abbruchmeldung so arbeiten als wäre mit _ alles gut? Ist das vielleicht nur eine "falsche" Meldung? Wie könnte man denn testen, ob es ohne Meldung "korrekt" arbeiten würde? Wenn der Cache leer ist, veranlasst _ dann zu einem stat() oder was anderes oder gar nichts?
So eine Meldung zu unterdrücken ist keine gute Idee. Du kannst Dir den Code von
CPAN:Archive::Zip::DirectoryMember ja mal ansehen, ob das dann für Dich funktioniert, wenn stat(_) Unsinn liefert, das kann ich nicht beurteilen.

Aber ich habe eine Spur. Dazu wäre es doch noch nötig, die Ersetzung von _ durch $fileName nur an der Stelle vorzunehmen, an der Perl sich beschwert hat:

Code (perl): (dl )
1
2
3
4
5
6
    if (-e $fileName) {

        # -e does NOT do a full stat, so we need to do one now
        if (-d _ ) { # Das bleibt hier so stehen!
#            my @stat = stat(_);
            my @stat = stat($fileName);

Ich vermute, das Dein Code dann läuft. Falls dem so ist: Irgendein Teil in Deinem Code übernagelt die stat-Funktion. Das geht, es gibt sogar einen Perl-Modul, der das macht (CPAN:File::stat), und mit diesem Modul funktioniert (ist dokumentiert) _ nicht. Aber das Modul übernagelt stat nur "lokal" in dem Modul, in dem das use File::stat steht, käme also nicht in den Wirkungsbereich Archive::Zip::DirectoryMember.

Damit bleibt der vage Verdacht, dass ein von Dir verwendetes Modul die globale stat-Funktion übernagelt. In diesem Fall kannst Du Dir behelfen, indem Du use Archive::Zip möglichst früh (und wirklich mit use und nicht mit require) einbindest. Dann ist die Auflösung zum "richtigen" stat schon passiert, bevor jemand das überschreibt.

View full thread Variable _ ?