読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

職業Perlプログラマの日常

諸々の事情により、仕事で使うツールperlで書くはめになったプログラマの記録です。

その1

my $flag=false;
$ perl -w test.pl 
Unquoted string "false" may clash with future reserved word at test.pl line 1.

true/falseはリテラルにあらず。Javaとは違うのだよ、Javaとは。

その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(偽)が返る。

なにおー。

まとめ

Perl」なんて「Ruby」とにたようなもんだろ、ハッハー、とか思って取り組むのはやや無理があるので注意な!