[232] Re:インタプリタとコンパイラ
投稿者:iwa
2007/02/20 02:13:25
>Perlのようなインタプリタ型の言語は、なぜエラーにならないのでしょうか?
インタプリタだから、ではなくて、perlの言語仕様的な問題です。
perlの場合、関数の引数は全て配列(@_)として扱われます。なので、この場合は、
一つ目の%sには$_[0]が、二つ目の%sには$_[1]が、三つ目の%sには$_[2]が入ります。
このとき、Cあたりだと配列長を超えたらそのままバッファオーバーラン、Javaだと
例外が投げられますが、perlの場合は読むときはundefが返り、書くときは自動で
配列長が拡大されます。
今回の場合は、$_[2]を読もうとして返ってきたundefが文字列化されて空文字列
扱いになったわけです。