2009-08-09から1日間の記事一覧

特殊変数 $^I の使い方

1つのディレクトリに含まれる大量のファイルに対して、一括で変更を行いたい場合 my $target = "*.dat"; @ARGV = glob $target or die; $^I = ".bak"; # これがスイッチ while(<>) { s/(^Date:).*/\1 2009-8-10/; # Date ヘッダを 8/10 にして s/^Phone: .*\…

グロブ

シェルの * の展開と同じことが perl でも出来る。カレントディレクトリのグロブを展開すると以下のような感じ。(join で結合してるだけで、glob 自体は、単なるファイル名のリストを返す) % perl -e "warn join ',', glob '*';" a,b,c,d,do.pl,e at -e li…

stat バッファ

perl でファイルのテスト等を行うと、システムコールが発行されるが、そのstatの結果はバッファに格納される。 そのバッファから値を読み込むためには、"_" ファイルハンドルにアクセスする。例えば、引数に指定されたファイル名のファイルが自分が作成した…

perl には2種類の select がある

詳しくは、 % perldoc -f select 一個目の select は、デフォルトの出力ファイルハンドルを変更するもの。 select MYOUT; print "Hi! My name is Kameid.\n"; select STDOUT; # 標準出力に出力ファイルハンドルを戻す 上記の print は標準出力ではなくて、MY…

ダイヤモンド演算子(<>)の動き

Larry の娘さんが名づけたというダイヤモンド演算子、"<>"。標準入力を受け取るものだと今まで思っていた。実際簡単なスクリプトを書くときには良く使用してもいた。・・・が、実は相当違うものだった。 ==> a <== file a ==> b <== file b ==> c <== file c…

while と foreach の違い

while(<STDIN>) { print; } と foreach (<STDIN>) { print; } の違いをあんまり意識していなかったが、while は、一行ずつこれを解釈し、print するのに対して、foreach はリストコンテキストで使われる。つまり、ループの実行を始める前に、リストの内容をすべて読み込む</stdin></stdin>…

perl には連想配列がもう存在しない

連想配列(associative array)という呼び方は長すぎる!ということで、1995年ごろに変更されたらしい。今はハッシュ(hash) というらしい。・・・いやー、自分でも自然にハッシュといっていたが、まさかこんな昔に変更があったとは。私が Perl を勉強したころ…

「初めてのPerl」 を初めて読んだ

まるまる2日近く持ってかれた。・・・どんだけ読むの遅いの俺。知らなかったことを以下にまとめておいた。他にもあったが小さいものはノートにメモメモした。Perl って面白い言語だなーほんと。 しっかし自分が Perl についてまだまだ初心者の域を脱せていな…