Perlゼミ

  1. Perl
  2. 演算子
  3. here

Defined-or演算子「//」

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演算子が導入されたので、上記の二つの間の記述で悩まなくてよくなったのがうれしいですね。

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!