[Vienna-pm] Vars in sub max {..}
Wolfgang Laun
Wolfgang.Laun at alcatel.at
Fri Feb 3 05:18:15 PST 2006
Die simple Variante
sub max {
my $res = $_[0];
foreach ( @_ ){ $res = $_ if $_ > $res };
return $res;
}
ist nicht merklich langsamer, vermeidet die (nach meinem persönlichen
Geschmack) unfeine Signatur und ist auch ein wenig lesbarer. Die
Variante mit pop wird übrigens bei größeren Arrays (so ab 400 Elemente)
bei meinem Perl und auf meiner Maschine langsamer.
Benchmark: timing 200000 iterations of maxhack, maxloop...
max/pop: 21 wallclock secs (20.84 usr + 0.00 sys = 20.84 CPU) @
9596.93/s (n=200000)
max/loop: 20 wallclock secs (20.03 usr + 0.00 sys = 20.03 CPU) @
9985.02/s (n=200000)
Gruß
Wolfgang
Carl A. Schreiber wrote:
>
>hmm - aber Danke! -
>das würde bedeuten, diese Version ohne Hilfsvariablen wäre bei eine
>24h-7d-Programm besser?
>sub max {
> $_[0] = pop;
> foreach ( @_ ) { $_[0] = $_ if ($_ > $_[0]) }
>}
> max( $max, @Werte );
>(Ich war überrascht, aber das geht, testprogramm ist unten ..
>trotzdem, ist das irgendwie gefährlich?)
>
>Anm1. zwar wäre wohl eigentlich korrekt:
>sub max {
> ${$_[0]} = pop;
> foreach ( @_[1 .. $#_ ] ) { ${$_[0]} = $_ if ($_ > ${$_[0]} ) }
>}
>und max( \$max, @Werte );
>aber ist langsamer!
>
>
>
>
More information about the Vienna-pm
mailing list