メールマガジンの「Perlで書く」を読んでいたら、なんとなく試してみたくなったので、実行してみた。
continue構文は使ったことない。
使いどころがわからないというか、意識したこともなかった。
参考
ついでに、普通だったらこう書くよね、という感じのforeachも入れてベンチマークをとってみた。
結果
Rate sub_while_continue sub_for sub_foreach_normal
sub_while_continue 75245/s -- -1% -9%
sub_for 76220/s 1% -- -8%
sub_foreach_normal 83126/s 10% 9% --
結果はforeachがやはり速い。
foreach以外はループするかどうかの判断をしている分、遅くなるのはしょうがないのだろう。
ベンチマークコードは以下のとおり。
ベンチマークコード
#!/usr/bin/perl
#utf8
use strict;
use warnings;
use Benchmark qw(:all);
use Perl6::Say;
sub confirm ($) {
# say shift;
}
cmpthese( 100000, {
sub_foreach_normal => sub {
my $sum = 0;
foreach my $i (1 .. 100) {
$sum += $i;
}
confirm $sum;
},
sub_while_continue => sub {
my $sum = 0;
my $i = 1;
while ($i < 101) {
$sum += $i;
}
continue {
$i++;
}
confirm $sum;
},
sub_for => sub {
my $sum = 0;
for (my $i = 1; $i < 101; $i++) {
$sum += $i;
}
confirm $sum;
},
});


コメントする