Perlで引数を取得するとき

サブルーチンで一つの引数を取得するとき
sub my_subroutine{
    my $val1 = @_;
    ...
}
とやってしまい、$val1が "1" となってしまった。
sub my_subroutine{
    my ($val1) = @_;
    ...
}
このようにしなければならない。@_ は、配列だからである。配列を、カッコで括った複数の変数に代入すると、その変数の数だけの配列がコピーされる。
上記の例は、配列の最初の要素を、$val1にコピーしているのである。基本的なことだけど。最初の $val1 = @_ とやると、配列 @_ の要素数が入るのかな。だから1になった。

アクセスログ

さくらインターネットのレンタルサーバではwebalizerが使えるのだが、このログは午前0時に前日のログを作成するようになっている。「現在のログ」が見たくてさがしたのだがなかった。おそらく共用サーバなのでひとつにまとまっているのを分割しているのだと思う。そこでcgiでログをとることにした。環境変数をファイルにはくだけでよいので簡単である。flockという関数を、よくわからないが使ってみた。パースは厳密にやろうとすると大変なので、とりあえずそのまま書いて、検索語だけをデコードするようにした。




tcl

proc load_file {} {
    set file [tk_getOpenFile]
    set f [open $file]
    text .t0
    pack .t0
    set line_count 1
    while {[gets $f line] >= 0} {
        .t0 insert end "$line\n"
        incr line_count
    }
    close $f
}
button .b -text "Open" -command load_file
pack .b

tclはおもしろいんだけど、一体どんな場合に使うんだろうと、ずっとピンと来ない。とりあえずActiveStateからダウンロードしてデモを見てみる。すごい。すごいけど、これをどうすればいいのだろう・・・