3

時々私は書きたいです:

my $var = shift // undef;    # argument is optional
                             # or

my $var = $val{optional_value} // undef;

もちろん、引数が欠落していても問題がないことを示すためです。そうでない場合は役に立ちません// undef

これはどれくらいの費用がかかりますか、コンパイラによって最適化されていますか?

4

3 に答える 3

7

それほど高くはないと思いますが、言わざるを得ません

my $var = shift // undef;

ほど明確ではありません

my $var = shift;    # argument is optional

また

my $var = shift;    # optional; undef if omitted

どちらも実行時に間違いなく(ほとんどではありませんが)安価です。とにかくコメントが必要な場合(明確にするため)、// undef不要なオペコードを除いて実際に何を追加しますか?

于 2012-07-26T03:31:20.830 に答える
1

あなたの質問に答えるために:そうではなく、いいえ。

于 2012-07-26T03:08:32.973 に答える
0

ベンチマークを試しました:

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)

したがって、結果は上記の内容を確認します。

于 2012-07-26T03:39:47.677 に答える