狐の王国


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)

この記事のURI

最近の記事

以上、1 日分

タイトル一覧


カテゴリ分類
Powered by hns-2.19.8, HyperNikkiSystem Project

過去にこの日記が置いてあったcgi.misao.gr.jpは廃止されました。それによって記事へのURIが変わってしまっています。cgi.misao.gr.jpをwww.misao.gr.jpと置き換えるだけで同じ記事にアクセスできるはずです。

Sugano "狐志庵" Yoshihisa(E) @ 美紗緒ネットワーク <koshian@misao.gr.jp>
日記管理ページ