@kyanny's blog

印刷は人間に対し市場を作り出し、国民軍を創設する方法も教えたのであった - マーシャル・マクルーハン「グーデンベルグの銀河系」

今日のPerlMonks

Changes in Latest Version of CGI::Application (4.02)
結論からいうと、CGI-Application-4.02にはバグがあるのでアップグレードするなら4.03にしようねという話なのはわかったのだが。

肝心のバグってた部分ってのが、よーわからん。$self->mode_param('rm')ってハードコーディングされてるからダメってこと?違う気がするんだよなー。setup()で呼ぶべきとされているものをcgiapp_init()で呼んだらおかしくなったってことだろ。cgiapp_init()はえーとsetup()の前に呼ばれるんだっけあとだっけ。そこをわかってないから挙動がおかしいのかどうかもわからないのだな。ううむ。

Get the $main value when use local
あ!これは問いを読んだだけでわかったぞ。

$a='main';
if (1)
{
local $a='sub';
print "\n$a";
print "\n$main::a";
}
print "\n$a";

変数がブロックの中でlocal宣言されると、そのブロックを抜けるまでの間、同じ名前のグローバル変数の値を一時的に退避させて、宣言された値で置き換えられる。だから$main::aという参照の仕方をしても、ブロックの中ではグローバル変数$aの値が'sub'に置き換えられているので、ブロックの中で参照するならば'sub'が出力される。myで宣言すれば、$main:::aと$aはそれぞれ別の値を参照されるので結果が違ってくる。