時々私は書きたいです:
my $var = shift // undef; # argument is optional
# or
my $var = $val{optional_value} // undef;
もちろん、引数が欠落していても問題がないことを示すためです。そうでない場合は役に立ちません// undef
。
これはどれくらいの費用がかかりますか、コンパイラによって最適化されていますか?
それほど高くはないと思いますが、言わざるを得ません
my $var = shift // undef;
ほど明確ではありません
my $var = shift; # argument is optional
また
my $var = shift; # optional; undef if omitted
どちらも実行時に間違いなく(ほとんどではありませんが)安価です。とにかくコメントが必要な場合(明確にするため)、// undef
不要なオペコードを除いて実際に何を追加しますか?
あなたの質問に答えるために:そうではなく、いいえ。
ベンチマークを試しました:
use strict;
use Benchmark qw(:all);
sub shu
{
my $x = shift // undef;
return $x // 0;
}
sub sh
{
my $x = shift;
return $x // 0;
}
timethese ( 100_000_000, { shu => \&shu, sh => \&sh } );
# outputs:
# Benchmark: timing 100000000 iterations of sh, shu...
# sh: 14 wallclock secs (14.95 usr + -0.06 sys = 14.89 CPU) @ 6715916.72/s (n=100000000)
# shu: 16 wallclock secs (16.74 usr + -0.02 sys = 16.72 CPU) @ 5980861.24/s (n=100000000)
したがって、結果は上記の内容を確認します。