2005年06月06日(月) [過去の今日]
#1 perlのshiftと代入
perlの関数で引数を得るとき、二つの方法がある。@_から代入する方法と、@_からshiftで取り出す方法だ。どっちが正しいやり方なのかは知らないが。
で、どっちが速いのか気になってベンチマークを取ってみた。
#!/usr/bin/perl $str = "Shift or Substitute?\n"; sub exec_print_shift($) { my $str = shift @_; print $str; } sub exec_print_sub($) { my ( $str ) = @_; print $str; } for ( my $i = 0; $i <= 99999; $i++ ) { if ( $ARGV[0] eq 'shift' ) { &exec_print_shift($str); } elsif ( $ARGV[0] eq 'sub' ) { &exec_print_sub($str); } }
このプログラムを実行してtimeで速度を見ると、
$ time ./shift.pl shift >/dev/null real 0m0.249s user 0m0.234s sys 0m0.002s $ time ./shift.pl sub >/dev/null real 0m0.283s user 0m0.259s sys 0m0.008s
と、微妙にshiftで取り出した方が速いことがわかる。
引数が増えて来た場合はどうなるんだろうなあ。まあ、とりあえず引数が一つなら迷わずshiftで取り出せということで。
(@138)
@ ぐは:
subのほうが2回判定やってんだからおせーの当り前じゃんよ、何やってんだ俺。
elsifをelseにしたら有意な差は出なかった。くそったれ。
(@222)