職業Perlプログラマの日常
諸々の事情により、仕事で使うツールをperlで書くはめになったプログラマの記録です。
その1
my $flag=false;
$ perl -w test.pl Unquoted string "false" may clash with future reserved word at test.pl line 1.
その2
my $str = "a"; if ( $str == "a") { # .. 略 }
$ perl -w test.pl Argument "a" isn't numeric in numeric eq (==) at test.pl line 2.
え?まさか「str.equals("a")」?とか一瞬思ったのは秘密だ。
その3
if ( $str =~ /a.*/ ) { # ..略 } else if ( $str =~ /b.*/ ) { # ..略 } else { # ..略 }
$ perl -w test.pl syntax error at test.pl line 3, near "else if" Execution of test.pl aborted due to compilation errors.
「{}」で括るからといってJavaと同じと思っていると痛い目に。正解は↓で微妙にRuby。
if ( $str =~ /a.*/ ) { # ..略 } elsif ( $str =~ /b.*/ ) { # ..略 } else { # ..略 }
その4
my @array = ("a","b","c"); print @array[0];
$ perl -w test.pl Scalar value @array[0] better written as $array[0] at test.pl line 2. a
要素を参照するときは違うのを付けないとダメですよ。
my @array = ("a","b","c"); print $array[0];
その5
my @array = ("a","b","c"); print $array[0]; my %hash = { "a"=>"aaa", "b"=>"bbb", "c"=>"ccc" }; print $hash["a"];
リテラルで使うのは「()」、参照時は「{}」。JavaScripterやRubyistに対する嫌がらせとしか思えぬ。
my @array = ("a","b","c"); print $array[0]; my %hash = ( "a"=>"aaa", "b"=>"bbb", "c"=>"ccc" ); print $hash{"a"};
その6
my @array = ("aa","bb","cc"); for ( my $i=0; $i<$#array; $i++ ) { print $array[$i]."\n"; }
$ perl test.pl aa bb
最後のが出力されねー、とか思ったら「$#array」は「配列の長さ-1」だった・・・。「for $item (@array) {}」を使えということなのか。
my @array = ("aa","bb","cc"); for my $item ( @array ) { print $item."\n"; }
その7
Perlといえば「or die」だよね! ということで
rename($src, $to) or die "failed ..."; unlink($file) or die "failed ..."; system($cmd) or die "failed ...";
とか書いていたら死にまくり。
- 「unlink」は削除したファイル数を返す。ファイルが削除できた場合 1より大きい値が返る。
- 「system」はコマンドを実行し、その戻り値を返す。コマンドの実行に成功した場合、一般的には0(偽)が返る。
なにおー。