サブルーチンに引数を渡すための Perl のメカニズムは単一のリストであるため、引数は位置指定です。これにより、デフォルト値を提供することが難しくなります。一部のビルトイン ( などsubstr
) は、使用される可能性に応じて引数を並べ替えることでこれを処理します。使用頻度の低い引数は最後に表示され、便利なデフォルトがあります。
これを行うよりクリーンな方法は、名前付き引数を使用することです。Perl は名前付き引数自体をサポートしていませんが、ハッシュでそれらをエミュレートできます:
use 5.010; # for //
sub hello {
my %arg = @_;
my $say = delete $arg{say} // 'Hello';
my $to = delete $arg{to} // 'World!';
print "$say $to\n";
}
hello(say => 'Hi', to => 'everyone'); # Hi everyone
hello(say => 'Hi'); # Hi world!
hello(to => 'neighbor Bob'); # Hello neighbor Bob
hello(); # Hello world!
注: defined-or 演算子//
は Perl v5.10 で追加されました。||
論理的に偽の値''
and をデフォルトにしないため、論理 or ( ) を使用するよりも堅牢です0
。