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

サンプルコードによる「Perl入門」 - 未経験からプロの技術が身につくPerl講座

★★ 未経験から初めて、プロの実力がどんどん身につく、Perl入門講座 ★★
テキスト処理ならPerlが最適。if文,for文,配列,ハッシュ,正規表現を覚えれば、ログ解析も自由自在。大量のExcelデータを高速に集計。Webサイトを作成して、独自のサービスの展開も! 関数とモジュールを覚えれば業務効率が劇的に改善。初級から上級まで、Perlのすべてが学べます。「へぇー、こうすればこんなに簡単にできるんだ!!」プログラミングの面白さを実感しよう。
プロとして第一線で活躍し続けるために、プログラミングの確かな実力を「サンプルコードによるPerl入門」で身に着けてみませんか。 学び続けることで、あなたのエンジニアとしての価値が5倍、10倍に高まります。

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
リンク元