perlの意外な動作について気づいたことを。
文字列に対するビット演算
use strict; $a="33"; print( $a & "7","\n" ); #=> 3 print( $a + "7","\n" ); #=> 40 print( $a & "7","\n" ); #=> 1
最初の print と最後の print は全く同じ式なのに結果が異なる。
文字列に対してビット演算をするのが悪いという話ではあるが、だからといってひどすぎると思う。
$a の前に my がないが、これで警告なしで動作するというのも意外であった。
念の為に書いておくと、変数が $a ではなく $aaa だとちゃんとエラーになり、my が必要になる。
Hashのeach
use strict; my %h=( apple=>1, banana=>2 ); while ( my @a = each(%h) ) { while ( my @a = each(%h) ) { print "@a\n" } }
これを実行すると、無限ループになって終わらない。
内側のwhileがなければすぐに終わる。
ループの状態を %h の中に持っているのが原因。
そんなわけで、今のところperlは好きになれない。