今日のラクダ
ちょっとPerlに関してあやふやなところを整理するために,ラクダ本をじっくり読んでいきます。気になった点のみピックアップする方向で。
2章
2.1.1 コマンド入力演算子(逆クォート演算子) p.94
シングルクォートをデリミタにした場合は,
コマンド文字列に対する変数展開は行われない
main > qx(ps $$); PID TT STAT TIME COMMAND 520 p4 Ss+ 0:00.05 /opt/local/bin/perl /opt/local/bin/perlsh main > qx'ps $$'; PID TT STAT TIME COMMAND 522 p4 R+ 0:00.01 ps 522
Rubyにはこれに該当する機能はない模様。
2.11.3 ファイル名グロブ演算子 p.98
- 知らなかった…。けど,もはや使うことはなさそう。globを使う。
3章
3.1 項とリスト演算子 p.104
# chdir($foo) * 20と間違えないように+をつける chdir +($foo) * 20 # chdir ($foo * 20)
ふつうに括弧を付けた方が分かりやすい。
3.3 オートインクリメント演算子とオートデクリメント演算子 p.107
文字列コンテキストだけで使われ,パターン/^[a-zA-Z]*[0-9]*$/のような変数で適用すると、オーとインクリメント演算子はその値を文字列として増加させる。
RubyのString#succみたいな。
main > ++("hoge"); Error: Can't modify constant item in preincrement (++) at (eval 3) line 1, at EOF main > $hoge = "hoge"; hoge main > ++($hoge); hogf
3.5 記号の単項演算子 p.108
オペランドが識別子ならば,その識別子の先頭にマイナス記号を付けた文字列を返す。
まぁ普通使わないだろうな。
main > -hoge -hoge main > -0 0
しかし,~のオペランドが数字でなくて,文字列の場合,全ビットを反転した同じ長さの文字列が返される
main > ~"abcde" �����
ビット演算をしっかり理解してないと使いどころがいまいち分からない。
3.7 乗法演算子 p.110
リストコンテキストでは,左オペランドがカッコで囲まれたリストなら、x演算子は,(文字列ではなく)リストを繰り返し複製する。
これはふつうに使いそう。RubyのArray#*と同じ。
main > qw(1 2 3 ) x 5 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
3.10 名前付き単項演算子とファイルテスト演算子 p.112
リスト演算子は覚える。
名前付き単項演算子の多くは,引数を省くと$_を使うと言う点だ。
ファイルテスト演算子はワンライナーとかシェルスクリプトの代わりをする際に非常に便利そう。-Tオプションが興味深い。RubyのFileTestモジュールには同様のやつはない。必ず-eと併用するようにする。
下線文字1つからなる特別なファイルハンドル(_)をファイルテスト演算子(またはstatかlstat)に与えると,システムコールは行なわずに、前回のファイルテスト(またはstat演算子)が取得したstat構造体の内容を再利用する
使わなそうだけど,とりあえず覚えておく。