Perl で for 文

俺は俺に驚いた、という話。

use strict;
my $i
for ($i=0, $i<10, $i++) {
  print "$i\n";
}

実行結果はどうなる?0から9まで並ぶと思うじゃん??????

でも結果はコレ

inu@myhost~% perl -e ' for ($i=0,$i<10,$i++) { print "$i\n"; };'
1
1
1

こんなことがなぜ起こるか、本当にわからなくて、心の底からあせった。変な汗が出た。俺が思っていたPerlPerlでなくなる瞬間、俺が思っていた技術がまったく検討外れだったんじゃないかと思ってしまう瞬間、エンジニアとしての寿命を感じる瞬間を感じたよ(言い過ぎ)。

正解は、セミコロン。

use strict;
my $i
for ($i=0; $i<10; $i++) {
  print "$i\n";
}

エラーにしてくれりゃいいのに・・・・・・って思う俺。でもさっきのコードは本当に正しいコードなんだ。考えたらわかるよ、そりゃ。だけどひさしぶりに書くとこういう凡ミスにそりゃ気づかないったらないんだよ、いや、わかってくれよ。

$iを$_に変えたら面白かった。

inu@myhost~% perl -e ' for ($i=0,$i<10,$i++) { print "$_\n"; };'
1
1
0

なるほど!!!