[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