Die gleiche Warnung mehrmals, wenn das Paket in @ISA nicht geladen ist

8

beim Refactoring etwas von meinem Perl-Code i bemerkte folgendes Strangverhalten.
Betrachten Sie dieses kleine Beispielskript:

%Vor%

die erwartete Warnung

%Vor%

erscheint dreimal anstatt nur einmal. Was sind die anderen zwei Auslöser für diese Warnung? Alle drei beziehen sich auf exit(0) .
Perl-Version 5.12.4 auf Gentoo Linux.

danke.

    
Nico Rittner 11.11.2013, 11:23
quelle

1 Antwort

1

Ich glaube, tjd hat die Antwort bekommen. Wenn Sie dem Testpaket eine DESTROY () und AUTOLOAD () -Methode hinzufügen, erhalten Sie nur eine Warnung (über das Fehlen von @test :: ISA).

%Vor%

Sie müssen im Allgemeinen sicherstellen, dass die in der @ISA-Liste aufgeführten Pakete bereits geladen wurden. In Ihrem Beispiel haben Sie möglicherweise Folgendes erwartet:

%Vor%

Es ist ein bisschen seltsam, dass Ihr Paket keine explizite new () -Methode hat. Stattdessen haben Sie eine Anweisung, die bless ();

aufruft

Wenn Sie eine neue () Methode wie diese hatten:

%Vor%

Dann würden Sie die dreifache Fehlermeldung erst sehen, wenn etwas neu ();

genannt wird %Vor%

Vielleicht möchten Sie das Pragma 'base' verwenden, was zu einem fatalen Fehler führt, der besagt, dass das 'fehlende' Paket nicht geladen werden kann:

%Vor%

Das Basis-Pragma versucht, das fehlende Paket für Sie zu laden. Sie brauchen keine separate 'missing' Anweisung.

So könnte das letzte Ding so aussehen:

%Vor%

Sie könnten dann all dies in eine Datei namens test.pm einfügen und in einem Skript verwenden:

%Vor%

Hoffe, das hilft.

    
jjohn 10.12.2013 18:41
quelle

Tags und Links