Antw: [vienna.pm] die Welt ist so ungerecht :-( - II

Roland Bauer roland.bauer at fff.at
Thu Apr 20 15:27:24 CDT 2000


* * * vienna-pm-list * * *


> Blöderweise funktioniert mit
>
> #!/usr/bin/perl -wan
>
> use strict;
> my $summe;
>
> BEGIN() { $summe = 0; }
> $summe += $F[2];
> END() { print "$summe\n"; }
>
> und selbiger Eingabedatei das Summieren nicht mehr. Jetzt gibt er mir
> 27 aus.

Ich hab uebersehen, dass BEGIN und END was Besonderes sind und
den Ablauf des scripts beeinflussen.
der BEGIN block wird nur  EINMAL aufgerufen, so wie
ENDE.

daher wird dort im originalscript summe auf null gesetzt.
und das script dann mehrmals aufgerufen (wegen -n)
und am ende EINMAL print aufgerufen.

das funktioniert, aber ist nicht strict.

bei meinem vorschlag steht aber der befehl "my"
im script und bei jedem aufruf des scripts wird
eine neue gleichnamige variable $summe angelegt.

und wenn dann ENDE kommt, wird jenes $summe
ausgedruckt, das im "selben" block ist.
und hier gehoeren der BEGIN und END block zusammen

und das erste $suumme war das im BEGINN und hatte den wert 27.

das heisst mein vorschlag ist jetzt strict, aber
funktioniert nicht.

mir scheint, das ist einer der faelle, wo man entweder
a) Kein use strict verwendet oder
b) BESSER: mit use vars $summe als "global" vereinbart
(das ist wieder strict)

#!/usr/bin/perl -wan
use strict;
use vars qw($summe);
BEGIN() { $summe = 0; }
$summe += $F[2];
END() { print "$summe\n"; }

das hab ich jetzt sogar getestet und es funktioniert.

BEGIN und END sind meiner meinung nach etwas
trickreich und ich verwende es eigentlich nie.
was nix heisst ...

das ganze ohne BEGIN und END:
(weniger elegant)

#!/usr/bin/perl -w

use strict;

my $summe;

while(<>) {
 $summe += (split)[2];
}
print "$summe\n";

# aufruf perl -w script.pl < liste.txt
# jetzt ohne -a und -n

auch diesesprogramm koennte man noch "einfacher"
gestlaten, wenn man die zeile

 $summe += (split)[2];


zB zerlegt in ...

my @werte = split /\s/, $_;
my $zahl = $werte[2];
$summe = $summe + $zahl;

ungetestet ... !!

roland



###
You are subscribed to vienna-pm-list as Roland Bauer <roland.bauer at fff.at>
http://www.fff.at/fff/vienna.pm/



More information about the Vienna-pm mailing list