ブログトップ 記事一覧 ログイン 無料ブログ開設

サンプルコードによるPerl入門 〜 安定と信頼のPerlを学ぼう 〜

2012-10-03

Perl 5.10未満のlengthは未定義値を渡したときに警告を発生させる

 Perl 5.10未満のlengthは未定義値を渡したときに警告を発生させます。なので、汎用的なモジュールでlengthを書きたい場合は次のように書くと警告が出ないようになります。

my $has_length = defined $foo && length $foo;

 定義されているかどうかを確認してからlength関数に渡すようにする。

 反対にPerl 5.12以上であれば、定義されていてかつ長さを持っているということがlength関数ひとつでかけるようになったとうことです。

my $has_length = length $foo;

 業務アプリケーションで最新のPerlを使っている場合は、上記のように書くと簡潔です。


Perlその他の情報へ

H.I.H.I. 2012/10/03 12:45 5.10だったらdefined-orがあるから、自分なら
my $has_length = length($foo // "")
とします。

perlcodesampleperlcodesample 2012/10/04 08:33 ありがとうございます。Perl5.10以降のPerlだったらこれで短く書けますね。情報ありがとうございます。

みすたあぽぽみすたあぽぽ 2012/10/10 12:46 ActivePerl Build 1008 で試したところ、警告は出ず、0
になりました。

perl -e "print length($a)"
0

Perl 5.10.1 だからでしょうか?

perlcodesampleperlcodesample 2012/10/11 20:45 たぶん「use warnings」下で警告がでると思います。そのワンライナーだと警告がチェックできないと思われます。

みすたあぽぽみすたあぽぽ 2012/10/12 00:44 だとすると Perl 5.10 に始まったことではないですね

hiratarahiratara 2012/10/12 18:37 undefの警告はlengthに限った話ではないので、関数の入力の時点とか、早めに弾くってのが鉄則かなあと思いました。その手段として my $string = $params{string} // '' やら $string //= '' やらはよく使うかと。

perlcodesampleperlcodesample 2012/10/15 20:09 ありがとうございます。いつでも事前にチェックはしておくのがよいですね。

じじいじじい 2012/10/21 00:49 use warnings; すると警告がでるぞってことですね?らくだ本に載ってました。読みましたか?

perlcodesampleperlcodesample 2012/10/30 10:26 じじいさん。そうなんです。僕もらくだ本を読みました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/perlcodesample/20121003/1349226081
リンク元