はじめての defined-or 演算子
はじめての defined-or 演算子
defined-or 演算子が登場した時には「別に使わなくてもいいなあ」と思っていました。
あれからだいぶ時間がたったのですが、まだ使ったことないです。
まあベンチとってみて速度が変わらなければ使わなければいいやと思いました。
ベンチコード
#!/usr/bin/env perl use strict; use warnings; use 5.010001; use Benchmark qw/cmpthese timethese/; my $count = 10_000_000; my ( $j, $k ) = ( 1, 2 ); cmpthese timethese $count, { 'defined' => sub { my $i = defined $j ? $j : $k; $i == 1 or die; }, 'defined or' => sub { my $i = $j // $k; $i == 1 or die; }, };
結果
一回目
:!perl bench/defined.pl Benchmark: timing 10000000 iterations of defined, defined or... defined: 3 wallclock secs ( 1.51 usr + 0.00 sys = 1.51 CPU) @ 6622516.56/s (n=10000000) defined or: 1 wallclock secs ( 1.22 usr + 0.00 sys = 1.22 CPU) @ 8196721.31/s (n=10000000) Rate defined defined or defined 6622517/s -- -19% defined or 8196721/s 24% --
2回目
:!perl bench/defined.pl Benchmark: timing 10000000 iterations of defined, defined or... defined: 2 wallclock secs ( 1.59 usr + 0.00 sys = 1.59 CPU) @ 6289308.18/s (n=10000000) defined or: 2 wallclock secs ( 1.28 usr + 0.00 sys = 1.28 CPU) @ 7812500.00/s (n=10000000) Rate defined defined or defined 6289308/s -- -19% defined or 7812500/s 24% --
3回目
:!perl bench/defined.pl Benchmark: timing 10000000 iterations of defined, defined or... defined: 1 wallclock secs ( 1.56 usr + 0.00 sys = 1.56 CPU) @ 6410256.41/s (n=10000000) defined or: 1 wallclock secs ( 1.31 usr + 0.00 sys = 1.31 CPU) @ 7633587.79/s (n=10000000) Rate defined defined or defined 6410256/s -- -16% defined or 7633588/s 19% --
感想
defined-or演算子は覚えておく必要があるなあ。