PERL - ist $var leer?

Post Reply
Message
Author
perlies

PERL - ist $var leer?

#1 Post by perlies »

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: Select all

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?

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

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 Post by perlies »

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
Posts: 2
Joined: 26. Feb 2007 8:39
Contact:

#4 Post by klausweiss »

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

Code: Select all

#!/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

Post Reply