array initialisieren
Thorsten Steffen
- perl
0 Cheatah0 speedy0 ArneB0 Thorsten Höser0 speedy
Hi,
stimmt es, daß ein array folgendermaßen initialisiert wird ?:
@array123 =();
Wenn nicht, wie dann ?
Gruß
Thorsten
Hi,
stimmt es, daß ein array folgendermaßen initialisiert wird ?:
@array123 =();
ja. Es stimmt aber nicht, daß es so initialisiert werden _muß_ ("my @array123;" reicht voll aus), und es stimmt auch nicht, daß es so initialisiert werden _sollte_.
Lies dazu bitte
perldoc -f my
perldoc -f local
perldoc perldata
Cheatah
Hi Ihr,
da wir gerade beim Initialisieren sind: was könnte man bei einem Fehler "use of unitialized value" verkehrt gemacht haben? Soweit ich das beurteilen kann sind in dem betreffenden script alle Variable initialisiert.
CU
speedy
Hi!
IMHO bedeutet daß, das du versuchst aus einer Variablen ohne Inhalt zu lesen, bzw. sie zu vergleichen. auch wenn sie initialisiert ist.
HTH
CU
ArneB
Hallo,
das Kamel sagt dazu:
"Use of uninitialized value
(W)Ein undefinierter Wert wurde verwendet, als wäre er bereits definiert. Er wurde als " " oder 0 interpretiert, aber vielleicht war das ja ein Fehler. Um diese Warnung zu unterdrücken, weisen Sie Ihren Variablen einfach Anfagswerte zu."
Und besser kann ich's auch nicht sagen.
Gruß,
Thorsten
Hi Thorsten,
danke erstmal für die Antwort.
"Use of uninitialized value
(W)Ein undefinierter Wert wurde verwendet, als wäre er bereits definiert. Er wurde als " " oder 0 interpretiert, aber vielleicht war das ja ein Fehler. Um diese Warnung zu unterdrücken, weisen Sie Ihren Variablen einfach Anfagswerte zu."
Steht das in "Programmieren mit PERL" von O`Reilly? Und was mache ich, wenn ich keinen Anfangswert haben möchte, sondern eine leere Variable (z.B. für Abfragen á la "if (! $skalar) { ... }")?
Viele Grüsse
speedy
Hi,
Und was mache ich, wenn ich keinen Anfangswert haben möchte, sondern eine leere Variable (z.B. für Abfragen á la "if (! $skalar) { ... }")?
perldoc perlsyn, mal nach "true" gesucht, findet am Beispiel von while:
'The while statement executes the block as long as the expression is true (does not evaluate to the null string ("") or 0 or "0").'
Du siehst also, unter welchen Bedingungen !$skalar true ergibt (an anderen Stellen ist es sicher noch ausführlicher erklärt, diese Textstelle war nur der erste(!) Versuch). Eine Initialisierung sollte so kein Problem sein - insbesondere wenn Du "my $skalar;" schreibst.
Cheatah
Moin Cheatah!
'The while statement executes the block as long as the expression is true (does not evaluate to the null string ("") or 0 or "0").'
Mmh... es steht zwar nicht dort, aber undef (eben jenes undefinierte etwas, das die Warnungen produziert, wenn es an unpassenden Stellen verwendet wird) wird ebenfalls zu false ausgewertet.
So long
Hi Calocybe,
Mmh... es steht zwar nicht dort, aber undef (eben jenes undefinierte etwas, das die Warnungen produziert, wenn es an unpassenden Stellen verwendet wird) wird ebenfalls zu false ausgewertet.
Könnte es sein, daß mein Problem ist, daß ich viele globale Variable mit undef initialisiere?
Grüsse
speedy
Hallo Achim
Steht das in "Programmieren mit PERL" von O`Reilly?
Ja (und zwar in Kapitel 9: Diagnosemeldungen).
Und was mache ich, wenn ich keinen Anfangswert haben möchte,
sondern eine leere Variable
(z.B. für Abfragen á la "if (! $skalar) { ... }")?
Dieser Ausdruck sollte eigentlich funktionieren, da Perl eine vorher nicht definierte Variable bei "Erstbenutzung" anlegt, es sei denn Du benutzt den Switch -w - was ich zumindest bei etwas umfangreicheren Programmen empfehlen würde. Dann musst Du Deine Variablen vorher mit "my" deklarieren (my $variable;). Der Vorteil des -w-Switches ist halt, das er halt viele Fehler aufzeigt.
Der Fehler in Deinem Programm schien mir ja nicht darin zu liegen, das Du eine Variable nicht deklarierst sondern so benutzt als hätte sie schon einen Wert.
Gruss,
Thorsten