Perl覚書・リスト編
CVSにソースをコミットしたときに自動でメールを飛ばす方法を調べていたら
http://www.gfd-dennou.org/library/cc-env/cvs/customize/cvs-commitmail.htm
に行き着いたので、ためしにこれにしたがって設定をしてみました。
その際にPerlスクリプトの挙動を変えたくなったので、今まで敬遠していたPerlの書き方を調べる羽目に…。
リスト関連でわかったことをメモしておこうかと思います。
【できること】
・リスト代入で不要な後ろの要素を省略
$now = time(); ($gmsec, $gmmin, $gmhour) = gmtime($now); # 時間要素しかイラネ
・配列へ一括代入
@now = gmtime(time());
【できないこと】
・リスト代入で不要な前の要素を省略
昔のVB的な省略ができるか?と思ってやってみました。
$now = time(); (, , , $mday, $mon, $year) = localtime($now); # 日付要素しかイラネ
→ syntax error at -e line 1, near "(," ってでる
でもやっぱりPerlは好かんです。
もともとWeb向けLLはPHPから入ってそのままそっちで慣れてしまったため、ついついPHPとの対比をしてしまいます。
以下理由。
・ヘタに省略ができちゃう
どうも調べてみると
$now = gmtime; $now = gmtime(); $now = gmtime(time); $now = gmtime(time());
は全部同義らしくて…。
引数リストが省略できるのはなんとも思わないのですが、括弧が省略できるのは相当いやですね。。
「変数には$%@のどれかがつくんだから、関数名なのは明らかだろ」と言われようがなんだろうがイヤですね。
以前VBで似たようなケースでトラウマになってるというのもあります。
PHPは関数の括弧の省略はできません。
賛否はあると思いますが、ある程度冗長になろうとも記述上の揺らぎがないほうが好み
・標準で使える組み込み関数が何なのかよくわからない。
PHPは公式リファレンスを見れば組み込みなのか、ライブラリをロードする必要があるのかがわかります。
・公式リファレンスがない。
PHPにはあります。
・スカラと配列と連想配列で頭につく記号が違う。
PHPは全部$で統一。
*nix系だと「Perlは標準で入ってるがPHPは入ってない」ということが多いので基本的な文法を抑えておく必要は前から感じていたんですが、まじめに使う言語にはなりえないかなーという感じでした。