perl小技



2010 2月4日

はてなの質問で気になったものを発見。

ファイルの書き込み速度を向上させる方法。 perlで一度に複数のファイルを書き出すプログラムを作っていますが、openで書き出しています。 ファイルの数が増えるとやはり徐々に完了まで時間がかかってきますが、ファイルを書き出す際の速度向上にはどのようなものがあるでしょうか。 ハードウェアの交換等以外でお願い致します。
http://q.hatena.ne.jp/1125455948

この回答にディスクの書き込みによけいなものを排除するというものがあった。
http://www.itmedia.co.jp/help/tips/linux/l0298.html

ようするにアクセス情報(更新時間等)を書き込まないようにする、との事。
速度を重視でファイルの内容のみを必要とするなら良いかも。







2010 1月8日

たまに使う配列のシャッフル。
コピペで使えると便利なので。

sub shuffle {
  my @list;
  push( @list, splice(@_, int(rand(@_))) ) while(@_);
  return @list;
}

使い方

my @data = (1,2,3,4,5);
@data = shuffle(@data);

参考:http://sonic64.com/2004-11-13.html







2009 7月30日

Linuxのコマンド

ls -cr `find /tmp -type f`

・find /tmp -type f
/tmp 以下のファイル全てを検索

・ls -cr
更新日時を古い順にソート

つまり /tmp 以下のファイルを更新日時が古い順にソートするコマンド。

ちなみに、
ls -c  最後にファイルのステータスを変更した時間でソート
ls -t  修正時刻順でソート。
ls -u  最後にファイルにアクセスした時刻でソート

perlで使う時は 、

open(IN, “ls -cr `find /tmp -type f` | “);
print while();

のように、openの中のコマンドの最後に | (パイプ)をつけるのがミソ。
これにより標準出力を受け取る事が出来る。

これを使って、CGI内部で別のCGIを実行して結果を受け取る・・・なんて事も出来る。