メールマガジンの「Perlで書く」を読んでいたら、なんとなく試してみたくなったので、実行してみた
メールマガジンの「Perlで書く」を読んでいたら、なんとなく試してみたくなったので、実行してみた。 continue構文は使ったことない。 使いどころがわからないというか、意識したこともなかった。
参考
ついでに、普通だったらこう書くよね、という感じのforeachも入れてベンチマークをとってみた。
結果
1
2
3
4
|
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以外はループするかどうかの判断をしている分、遅くなるのはしょうがないのだろう。 ベンチマークコードは以下のとおり。 ベンチマークコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
#!/usr/bin/perl
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;
},
}
);
|