PERL - ist $var leer?

Antworten
Nachricht
Autor
perlies

PERL - ist $var leer?

#1 Beitrag von perlies » 16. Feb 2007 16:18

Hallo.

Ich habe hier ein kleines Übungsprogramm für Hashes.
Mein Problem ist folgende Fehlermeldung wenn ich es ausführe.
Als Variablen gebe ich testweise mal a und b ein.
Wenn ich nichts eingebe (mit STRG-D beende) habe ich keine Fehlermeldung.
Fehlermeldung

Use of uninitialized value in addition (+) at ./perltest.pl line 10, <STDIN> line 2.
Use of uninitialized value in addition (+) at ./perltest.pl line 10, <STDIN> line 2.
a wurde 1-mal eingegeben
b wurde 1-mal eingegeben

Code: Alles auswählen

Quelltext

#!/usr/bin/perl

use warnings;

chomp&#40;@woerter = <STDIN>&#41;; # Beenden mit STRG-D
foreach $wort &#40;@woerter&#41; &#123;
if&#40;$wort&#41; &#123; # Hier will ich prüfen ob $wort leer ist, nur wie?
$zaehler&#123;$wort&#125; = $zaehler&#123;$wort&#125; +1;
	&#125;
&#125;

foreach $wort &#40;keys %zaehler&#41; &#123;
print&#40;"$wort wurde $zaehler&#123;$wort&#125;-mal eingegeben\n"&#41;;
&#125;
In der ersten foreach Schleife soll die Operation nur dann stattfinden wenn $wort nicht leer ist. mit ->>>> $wort eq "" ist es der selbe Fehler.

Wie macht man es richtig?

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 17. Feb 2007 11:03

Perl meckert nicht an, dass $wort leer sei. Perl meckert an, dass es $zaehler{$wort} beim ersten Auftauchen von $wort im Text ja noch nicht gibt. Das kann man (vermutlich) nur mit einer Fehlerbehandlung auf den Ausdruck abfragen. In Fehlerfall halt einfach $zaehler($wort) = 1;

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

perlies

#3 Beitrag von perlies » 17. Feb 2007 15:04

Ok, muss noch lernen wie man mit Perl umgeht.
Danke für die Antwort.
Eventuell versuche ich das mal umzuschreiben, ist ja alles nur Übung.

MfG

klausweiss
Beiträge: 2
Registriert: 26. Feb 2007 8:39
Kontaktdaten:

#4 Beitrag von klausweiss » 26. Feb 2007 8:54

Habe dir mal eben dazu ein Skript geschrieben, Code sollte selbst erklärend sein.

Code: Alles auswählen

#!/usr/bin/perl

my %words;

while&#40;<>&#41;
&#123;
  my @wordl = split /\s+/;

  foreach my $key &#40;@wordl&#41;
  &#123;
     if&#40;defined $words&#123;$key&#125;&#41;
     &#123;
       $words&#123;$key&#125;++;
     &#125;
     else
     &#123;
       $words&#123;$key&#125; = 1;
     &#125;
  &#125;
&#125;

foreach my $key &#40;keys %words&#41;
&#123;
  print "$key kam $words&#123;$key&#125; vor\n";
&#125;

GNU Maintainer

Antworten