« 便利なMTプラグイン | メイン | 引数の受取り方法 »

undefと0と空文字列

サブルーチンに初期値を持たせる方法」の中で書いた、

最近覚えたのだが、
$elm = {} unless defined $elm;

この行は、もっと簡単に

$elm ||= {};

こうやって書くこともできる。

は、正確には違うということに気づかされた。

まるごとPerl! Vol.1」という本に、Perl6の事について触れられていたのだが、その中で「||=」について書かれていた。
definedという関数は、未定義(undef)かどうかを判定して返す関数で、未定義以外の場合は真を返す。
なので、例えば$elmが「0」や「空文字列」だった場合は、左辺の式は実行されない。

一方「||=」は、$elmが「0」や「空文字列」であっても代入が実行される。
「0」も「空文字列」も「undef」も「偽」として評価されるためだ。

…ただ、「use strict」の環境下では、突然出てきた変数は警告されるので、通常は不要。
ほとんどの場合、これらの文はサブルーチンの中で引数が渡されたかどうかを監視するのを目的として使われる。

ちなみにPerl6では、関数ではなく演算子でもundefかどうかを調べられるらしい。

$elm //= {};

正確な意味で代用できる、という事ですね。

まるごとPerl! Vol.1
まるごとPerl! Vol.1
posted with amazlet on 06.11.12
小飼 弾 宮川 達彦 伊藤 直也 川合 孝典 水野 貴明
インプレスコミュニケーションズ
売り上げランキング: 22695

カテゴリ:

トラックバック

このエントリーのトラックバックURL:

この一覧は、次のエントリーを参照しています: undefと0と空文字列:

» defined-orという演算子 送信元 のぶろぐ
shag の日記 - defined-or(//) 先日の「undefと0と空文... [詳しくはこちら]

同一カテゴリの最新記事

最近のエントリー

Amazon.co.jp

Search Word Cloud

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type 3.36
Amazon.co.jp