Perlで開発

10年ぶりぐらいにPerlのプログラムを書こうとしたら、すっかり忘れていて大変だった。特に、warning がなかなか消えず困ったのがこれでした。数年後にやりそうなので、メモを。

CGI のパラメータの扱いで warning がでまくる件

Use of uninitialized value in string ...

というように、初期化されてないよーというエラーが出ます。例えば次のような場合。

#!/usr/bin/perl
use strict;
use warnings;
use CGI;

my $q = CGI->new();
my $m = $q->param('m');

if ($m eq '1'){
    print "1\n";
} else {
    print "not 1\n";
}

これは、$m の部分に値がはいってない場合が起こりうるわけで、定義されてない場合がある。そのため、警告メッセージがでる。そのため次のように defined で確認をすればいいようだ。

#!/usr/bin/perl
use strict;
use warnings;
use CGI;

my $q = CGI->new();
my $m = $q->param('m');

if (defined $m) {
   if ($m eq '1'){
       print "1\n";
   }
   else {
    print "not 1\n";
   }
}
else {
    print "not defined.\n";
}

これで警告は出なくなった。
参考サイト : http://om.pizzica.to/archives/2006/03/perl_use_of_uni.html

ネット上で探してると、strictを使ってなかったり、warningはずせとか、ありえん。