Inhalt:

Wieso kriege ich lauter Warnungen aus dem Modul Tk?

Wahrscheinlich verwendest Du in Deinem Perlprogramm soetwas wie

#!/usr/bin/perl -w
use Tk;

Ersetze das besser durch

#!/usr/bin/perl
use strict;
use warnings;

use Tk;

Denn dadurch, dass auf die Shebang (#!/usr/bin/perl) kein -w folgt, werden die Warnungen (durch use warnings;) nur für diese Datei aktiviert, was verhindert, dass man Warnungen aus Modulen erhält, die nicht für dafür gedacht sind (etwa Tk.pm).

Für ein kleines Demonstrationsbeispiel braucht man zunächst einmal ein Modul, das eine Warnung auslöst, etwa dieses hier (Beweis.pm):

package Beweis;
use strict;

sub drucke {
    print "undefinierter Wert im Paket : '", undef, "' :-)\n";
}

1;

und dann zwei Skripte, die einmal mit der Option -w und einmal mit use warnings; arbeiten, einmal beweis1.pl

#!/usr/bin/perl -w
use strict;

use Beweis;

Beweis::drucke();

und beweis2.pl

#!/usr/bin/perl
use strict;
use warnings;

use Beweis;

Beweis::drucke();

Ausgabe:

C:\Daten\perl>beweis1.pl
Use of uninitialized value in print at Beweis.pm line 5.
undefinierter Wert im Paket : '' :-)

C:\Daten\perl>beweis2.pl
undefinierter Wert im Paket : '' :-)

C:\Daten\perl>

Die passenden Stellen dazu aus dem Kamelbuch lauten:

  • Zitat aus dem Kamelbuch, 2. Deutsche Ausgabe 2001, Kapitel 4 "Anweisungen und Deklarationen", S. 136:
Zu diesem Fehler erhalten Sie eine Warnung, wenn sie in der Kommandozeile -w oder -W angeben oder wenn sie (was die zu bevorzugende Variante ist) das später im Abschnitt "Pragmas" beschriebene use warnings verwendet haben.

  • Selbes Buch, gleiches Kapitel, Abschnitt "Warnungen steuern", S. 142:
Es ist aber wesentlich besser, die Pragmas use warnings und no warnings zu verwenden [als die Kommandozeilenoption -w oder die globale Variable $^W. Ein Pragma ist besser, weil es während der Kompilierung ausgeführt wird, weil es als lexikalische Deklaration keinen Code beeinflussen kann, den es nicht beeinflussen soll, und weil es eine sehr feine Kontrolle über verschiedene Klassen von Warnungen erlaubt (auch wenn Sie das bis jetzt nicht gesehen haben).

  • und schließlich im Kapitel 31 "Pragma-Module" auf S. 886 im Abschnitt "use warnings":
Dieses lexikalisch beschränkte Pragma erlaubt die flexible Kontrolle der in Perl eingebauten Warnungen, und zwar sowohl der Warnungen des Compilers als auch der Warnungen des Laufzeitsystems. Es gab mal eine Zeit, da war die Kontrolle von Warnungen in Ihrem Perl-Programm nur über die Kommandozeilenoptionen -w bzw. die Variable $^W möglich. Obwohl sie nützlich waren, waren dies doch eher "Ganz-oder-gar-nicht-Ansätze". Die Verwendung der Option -w führt dazu, dass in Modulen, die Sie gar nicht geschrieben haben, Warnungen aktiviert werden, was für Sie gelegentlich problematisch und für den Autor peinlich ist.

-- ChristianDuehl - 09 Dec 2003

Ergänzungen, Kommentare

Kommentare werden am besten in folgender Form vorgenommen, damit sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff

UtilFaqSubForm edit

Titel Wieso kriege ich lauter Warnungen aus dem Modul Tk?
Autor
Bereich FaqAllgemeines
Topic revision: r3 - 2004-01-16 - 13:21:00 - TinaMueller
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.