> #!/usr/bin/perl -w
>Als erstes solltest Du Dir angewöhnen, "use strict" zu verwenden. Das wird Dir in Zukunft viele Male eine lange Fehlersuche ersparen. Mehr findest Du unter http://wiki.perl-community.de/cgi-bin/foswiki/view/Wissensbasis/UseStrict
> print "Bitte geben sie einen Dateinamen ein.\n";
> open (DATEI, <>);
Das schreibt man sauberer so:
chomp( my $file = <STDIN> );
open my $dateihandle, '<', $file or die "Fehler: $!";
> @text = ();
> $woerter = 0;
> $buchstaben = 0;
> $zeilen = 0;
> $text = <DATEI>;
>
>
> while (<DATEI>) {
>
>
> #Wörter zählen
> @textsplit = split /\s/, $text;
Hier teilst Du die erste Zeile. In $text steckt immer nur die erste Zeile der Datei, da Du $text = <DATEI> gemacht hast. Schmeiß die erste Zuweisung raus und mach dann
while( my $text = <DATEI> ){
bzw. bei meinem "open"
while( my $text = <$dateihandle> ){
> foreach $wort (@textsplit) {
> $woerter++;
> }
Man kann das aufsummieren auch so machen:
$woerter += scalar @textsplit;
"scalar @array" gibt die Anzahl der Elemente in dem Array zurück.
> #Buchstaben zählen
> @textsplit = split /\S/, $text;
> foreach $zeichen (@textsplit) {
> $buchstaben++;
> }
Hier solltest Du vielleicht eher für jedes Wort ein split machen:
my @words = split /\s/, $text;
for my $word ( @words ){
my @wordchars = split //, $word;
$buchstaben += scalar @wordchars;
}
> #Zeilen zählen
> @textsplit = split /\n/, $text;
> foreach $zeile (@textsplit) {
> $zeilen++;
> }
Zeilen brauchst Du nicht selbst zu zählen. In Perl gibt es die Spezialvariable $. (siehe perldoc perlvar). Also kannst Du nach der while-Schleife einfach ein
$zeilen = $. + 1;
> }
>
> print "Anzahl der Woerter: $woerter\n";
> print "Anzahl der Buchstaben: $buchstaben\n";
> print "Anzahl der Zeilen: $zeilen\n";
>
Solche vielen print-Befehle würde ich nicht so aufzählen. Ich würde das so schreiben:
print qq~
Anzahl der Wörter: $woerter
Anzahl der Buchstaben: $buchstaben
Anzahl der Zeilen: $zeilen
~;
> close DATEI;
>
> exit 0;
Datum: 24.04.2009-09:02
