||=を使った代入

なんと||にも省略記法があるということを知った.そういえばどこかで見たPerlコードで||を使ってサブルーチンの引数のデフォルト値を代入している文があったような...

$hoge ||= $bar    # => $hoge = $hoge || $bar

なので$hogeがundef or 0に限り$barを代入するということ.orやandを使って条件分岐させるってなんだかLispみたいですね.


これを利用したサブルーチンの例

hoge(1,2);
hoge(1);
hoge();

sub hoge{
  my ($foo, $bar) = @_;
  $foo ||= 20;
  $bar ||= 30;

  print "foo=$foo bar=$bar\n";
}

__END__
# 実行結果
foo=1 bar=2
foo=1 bar=30
foo=20 bar=30

なかなかサッパリ書けました.||=ではないけれど,||を利用してデフォルト値を設定するのにはこんな方法もある.

piyo(1,2);
piyo(1);
piyo();

sub piyo{
  my $foo = shift || 20;
  my $bar = shift || 30;

  print "foo=$foo bar=$bar\n";
}

__END__
# 実行結果
foo=1 bar=2
foo=1 bar=30
foo=20 bar=30

多分,こっちの方を昔見たことある.