Page 1 of 1

PERL - ist $var leer?

Posted: 16. Feb 2007 16:18
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?

Posted: 17. Feb 2007 11:03
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

Posted: 17. Feb 2007 15:04
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

Posted: 26. Feb 2007 8:54
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;