Defined-or演算子「//」




  1. Perl




  2. 演算子



  3. here

 Perl5.10からは、とても便利なDefined-or演算子//」が導入されました。スラッシュが二つ続く演算子です。とっても検索しにくいので、早めに覚えておくのがいいと思います。近年の機能追加では、僕的には一番お勧めの機能ですね。

# Defined-or演算子
//

 Defined-or演算子は、左辺が定義されている場合は、左辺値を返却し、未定義の場合は右辺値を返すという動作をします。

# 右辺が代入される
my $value = undef // 'default'; # 'default'

# 左辺が代入される
my $value = 0 // 'default';     # 0
my $value = '' // 'default';    # ''
my $value = 'foo' // 'default'; # 'foo'

 これは、値が与えられなかった場合のデフォルト値を定義するのにとても便利です。

my $name = $opts{name} // 'Ken';

 また//=という書き方も可能です。

$value //= 'default';

 $valueが未定義だった場合だけ、$valueに'default'が代入されます。

Perl5.10以前はどうしていたか

 以前はこの書き方を行うためには、defined関数を使って次のように書く必要がありました。

$value = 'default' unless defined $value;

 またこの書き方は、冗長なので、||演算子を使って次のように書く人も多くいました。

$value ||= 'default';

 でもこの書き方は、$valueが0や空文字列だった場合にも'default'が代入されてしまうために、潜在的なバグをアプリケーションにもたらしていました。

 Defined-or演算子が導入されたので、上記の二つの間の記述で悩まなくてよくなったのがうれしいですね。