Schrift
[thread]4650[/thread]

Textdatei einlesen, ändern, neue erstellen: open (DATEI, "text.txt") (Seite 2)

Leser: 18


<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten
havi
 2003-11-13 12:03
#43492 #43492
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
[quote=Crian,21.09.2003, 21:58]Benutze lieber nicht die Option -w in der Shebang, sondern statt dessen lieber use warnings;. Im Unterschied zur Option -w schaltetet dieses Pragma die Warnungen nur im Skript an[/quote]
Sorry, hab den Thread erst jetzt gelesen.

... weiss jemand sicher das diese Aussage stimmt ? - ich bin naemlich nicht dieser Meinung.

Gruss\n\n

<!--EDIT|havi|1068717837-->
Crian
 2003-11-13 12:27
#43493 #43493
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Ja, die AUssage stimmt ;-) *gg

Da gab es im alten Forum schon Diskussionen rum, ich such aber mal nach Quellen, um Dich zu überzeugen...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
havi
 2003-11-13 12:28
#43494 #43494
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Es ist definitv auch bei use warnings so.

Modul
Code: (dl )
1
2
3
4
5
6
package TestModul;
use strict;

our $test = "TEST".$test1;

1;


Skript
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use warnings;
use strict;
use lib "d:\\";
use TestModul;

print $TestModul::test;


Fehlermeldung
Code: (dl )
1
2
3
Global symbol "$test1" requires explicit package name at d:\/TestModul.pm line 5.
Compilation failed in require at D:\TesteModul.pl line 6.
BEGIN failed--compilation aborted at D:\TesteModul.pl line 6.


Gruss

Edit: Fehlermeldung hinzugefuegt\n\n

<!--EDIT|havi|1068719413-->
Crian
 2003-11-13 12:42
#43495 #43495
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Zitat aus dem Kamelbuch, 2. Deutsche Ausgabe 2001, Kapitel 4 "Anweisungen und Deklarationen", S. 136:

Quote
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:


Quote
Es ist aber wesentlich besser, die Pragmas use warnings und no warnings zu verwenden [als die Kommandozeilenoption [tt]-w[/tt] oder die globale Variable $^W. Ein Pragma ist besserm weil es während der Kompilierung ausgeführt wird, weil es als lexikalische Deklaration keinen Code beeinflussen kann, den es nicht beeinflusse 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":

Quote
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.


überzeugt?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2003-11-13 12:45
#43496 #43496
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=havi,13.11.2003, 11:28]Es ist definitv auch bei use warnings so.[/quote]
Nein ist es nicht. hättest Du schon viel mit Tk gearbeitet, wüsstest Du es, denn dieses Modul ist nicht zum Anschalten von Warnungen gedacht.

[quote=havi,13.11.2003, 11:28]Modul
Code: (dl )
1
2
3
4
5
6
package TestModul;
use strict;

our $test = "TEST".$test1;

1;


Skript
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use warnings;
use strict;
use lib "d:\\";
use TestModul;

print $TestModul::test;


Fehlermeldung
Code: (dl )
1
2
3
Global symbol "$test1" requires explicit package name at d:\/TestModul.pm line 5.
Compilation failed in require at D:\TesteModul.pl line 6.
BEGIN failed--compilation aborted at D:\TesteModul.pl line 6.


Gruss

Edit: Fehlermeldung hinzugefuegt[/quote]
Da fehlt die our-Deklaration, das ist ein Fehler, keine Warnung.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
havi
 2003-11-13 13:26
#43497 #43497
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Teste es doch mal mit our = gleiche Fehlermeldung!

Gruss
format_c
 2003-11-13 14:33
#43498 #43498
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@havi: Das verwenden einer nicht deklarierten Variable unter strict führt zu einem Kompilierungsabbruch durch strict.
Eine klassische Warnung währe eine deklarierte Variable mit undef mit print ausgeben zu wollen:

my $test1;
print $test1;


Würde so eine hübsche warnung erzeugen jedoch kein scriptabbruch. Also im Hauptscript mit use warnings sollte keine Warnungs kommen mit dem Schalter -w jedoch schon. Wenn dass so ist ist die Behauptung von Crian bewiesen.

BTW: Ich hatte da schon mit dubu lange Diskussionen weil ich auch immer etwas forsch in solchen Behauptungen bin.

Gruß alex
havi
 2003-11-13 14:37
#43499 #43499
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Ich glaube schoen langsam verstehe ich es... :)

Gruss
Crian
 2003-11-13 17:35
#43500 #43500
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=format_c,13.11.2003, 13:33]Eine klassische Warnung währe eine deklarierte Variable mit undef mit print ausgeben zu wollen:

my $test1;
print $test1;


Würde so eine hübsche warnung erzeugen jedoch kein scriptabbruch. Also im Hauptscript mit use warnings sollte keine Warnungs kommen mit dem Schalter -w jedoch schon. Wenn dass so ist ist die Behauptung von Crian bewiesen.[/quote]
Aha, ihr glaubt also weder mir noch Larry ... na gut:

Modul Beweis.pm:

Code: (dl )
1
2
3
4
5
6
7
8
package Beweis;
use strict;

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

1;


Programm beweis1.pl:

Code: (dl )
1
2
3
4
5
6
#!/usr/bin/perl -w
use strict;

use Beweis;

Beweis::drucke();


Programm beweis2.pl:

Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use strict;
use warnings;

use Beweis;

Beweis::drucke();


Mitschnitt im Commandofenster:

Code: (dl )
1
2
3
4
5
6
C:\Daten\perl>perl beweis1.pl
Use of uninitialized value in print at Beweis.pm line 5.
undefinierter Wert im Paket : '' :-)

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


Glaubt ihr mir jetzt ?\n\n

<!--EDIT|Crian|1068737788-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2003-11-13 17:38
#43501 #43501
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Vielleicht sollten meine Zitate und dieses Beispiel ihren Weg in die FAQ finden, denn schließlich wird immer wieder auf -w / use warnings hingewiesen...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 4 >| >> 31 Einträge, 4 Seiten



View all threads created 2003-09-16 00:10.