use encodingとの挙動のおかしさ

研究室の同期がPerlでハマる

use encoding 'shift-jis';

print "文字列を入力してください:";
my $str = <STDIN>;
print "文字列の長さ:".length($str)."\n";

実行すると,「文字列を入力してください」が表示される前に標準入力の受付状態になってしまい
入力を完了してから

ほげ
文字列を入力してください:文字列の長さ:2

と表示される.
原因は不明だけれど,なんとなく

print "文字列を入力してください:\n";

と改行を入れるようにしたら意図どおりの動作をした.


おそらくCでのgetchar(), getche()関数のあたりの話と同じで
バッファの端に改行文字があるとうんちゃらってことなのかな?
まぁ実際問題でこの問題を解決しないと前に進めないケースは少ないので
あくまでこういうことがあるよという知見を得るに留める.