not defined とヒアドキュメント
2006-09-07-1
[Programming]
先日の Perl 小物[2006-09-05-2]に対して弾さんからいろいろ
コメントいただきました。いつもありがとうございます。
- 404 Blog Not Found:javascript - youtube selector + 勝手に添削
http://blog.livedoor.jp/dankogai/archives/50621123.html
§
まず、「not defined」の件です。
http://blog.livedoor.jp/dankogai/archives/50621123.html
警告 ("Use of uninitialized value ...") が出るようになったので、
いつも入れているのです…。
「if (not defined $size or ...)」以外の対処方ないですかねえ…。
「my $size = 0」みたいに、必ず初期化するってのが王道かな。
普段、CGIのパラメタなどは「my $key = $q->param('key') || ""」
などとしたりして未定義状態を避けています。
でも、中身が「0」のときとか困りますね。
「まるごと Perl! Vol.1」の Perl 6 特集の竹迫さんの記事を読むと、
Perl 5.9.3 では「//演算子」というのがあって、この問題に対処できるそう。
「$x = 0 || 1」だと 1 になるけど、「$x = 0 // 1」だと 0 に。
これ便利そう!
§
それから、ヒアドキュメント(Here Text)のインデントの件。
インデントを無視する方法として、 Perl Cookbook にこんな方法が
載っていました。
あと変数に受けるときにしか使えないのもちょっと…。
「まるごと Perl! Vol.1」の Perl 6 特集の弾さんの記事を読むと、
ここで期待してる機能(下記)が Perl 6 で導入されるそう。
楽しみです。
§
日々勉強です…。
コメントいただきました。いつもありがとうございます。
- 404 Blog Not Found:javascript - youtube selector + 勝手に添削
http://blog.livedoor.jp/dankogai/archives/50621123.html
§
まず、「not defined」の件です。
http://blog.livedoor.jp/dankogai/archives/50621123.html
まず$sizeの初期化なのだけど、昔はそうやっていたのですが、「use warnings」を使い始めたら、
$size = 5 if (not defined $size or $size < 1);ってのは無駄が多い。
$size = 5 if $size < 1;で充分。
警告 ("Use of uninitialized value ...") が出るようになったので、
いつも入れているのです…。
「if (not defined $size or ...)」以外の対処方ないですかねえ…。
% cat a.pl #!/usr/bin/perl use strict; use warnings; my $size; testest($size); sub testest { my ($size) = @_; print "hello\n" if $size < 1; } % ./a.pl Use of uninitialized value in numeric lt (<) at ./a.pl line 8. hello
「my $size = 0」みたいに、必ず初期化するってのが王道かな。
普段、CGIのパラメタなどは「my $key = $q->param('key') || ""」
などとしたりして未定義状態を避けています。
でも、中身が「0」のときとか困りますね。
「まるごと Perl! Vol.1」の Perl 6 特集の竹迫さんの記事を読むと、
Perl 5.9.3 では「//演算子」というのがあって、この問題に対処できるそう。
「$x = 0 || 1」だと 1 になるけど、「$x = 0 // 1」だと 0 に。
これ便利そう!
§
それから、ヒアドキュメント(Here Text)のインデントの件。
インデントを無視する方法として、 Perl Cookbook にこんな方法が
載っていました。
でも、最後の「閉じ用文字列(?)」はインデントできないのがなあ。my $var; ($var = <<HERE_TARGET) =~ s/^\s+//gm; your text goes here HERE_TARGET
あと変数に受けるときにしか使えないのもちょっと…。
「まるごと Perl! Vol.1」の Perl 6 特集の弾さんの記事を読むと、
ここで期待してる機能(下記)が Perl 6 で導入されるそう。
楽しみです。
my $here = qq:to/以上/; 一行 二行 以上
§
日々勉強です…。