PerlTips

提供: MacWiki
移動: 案内検索

Perlプログラミングの小技

数値

数学

配列操作

配列の要素をランダムに選択する

$array[ rand @array ];

Perlに限らず、区間[0,1)の実数値を返すrandomといった関数と切り捨て (切り下げ) 関数floorといったものを使って、floor(random()*(n+1)) と書けば、0から正整数nまでの整数をランダムに返すものになる (別の範囲の整数が欲しければ適当な整数を加減すればいい)。

Perlのrand関数は0以上引数未満の実数値を返す。 また配列の要素を指定するインデックスが整数でない場合、整数に自動的に丸められる (ゼロへの丸め) ので $array[ int(rand @array) ] とint()を書く必要はない。

配列の要素をランダムに並び替える

use List::Util;
@array = List::Util::shuffle @array;

日付

ファイルのタイムスタンプを取得。

localtime( (stat $filename)[9] );

日付テキストのフォーマット付き出力。

use Time::Local;
use POSIX qw(strftime);
print strftime "%Y/%m/%d %H:%M:%S¥n", localtime();


大量ファイルの一括処理

ディレクトリ内の全ファイル

opendir(DIR, "/somewhere");
@files = readdir( DIR );
foreach $f ( @files ){
    # do something
}
closedir(DIR);

連番ファイル

#!/usr/bin/perl
foreach $i ( 0..79 ){
    $_ = sprintf( "../../sq01/data/field-%03d-00097.dat", $i);
    print( "ln -s $_", "\n" );
#    system( "ln -s $_" );
}
#end

ファイル情報

ファイルサイズを取得。

localtime( (stat $filename)[7] );

入力操作

Mac OS Xのクリップボードからテキストを読み込む際には (日本語環境では)¥ 記号を \ に修正する必要があります。

my $content = `pbpaste`;
$content =~ s/\x80/\\/g;

出力

クリップボードに出力

Mac OS Xのクリップボードに出力します。その際、iconv コマンド(ref.UNIXの基本コマンド)で、漢字コードを EUC → SJIS に変換した方が良いでしょう。

open OUT, "| iconv -f euc-jp -t sjis | pbcopy";
print OUT "Hello\n";

AppleScriptに出力。

open OUT, "| iconv -f euc-jp -t sjis | osascript";
print OUT "Tell application \"Finder\" to activate\n";

パイプ

標準エラー出力を捕まえるには

open(ERRIN,"command 2>&1 |");

のようにする。

数値とバイナリの変換

Wiki のデータディレクトリは、次のようにすれば見やすい。

ls | perl -pe 's/(([0-9A-F]+)\.txt)$/$1 . "\t[ " . pack("H*",$2) . " ]"/eg'

Perl 5.8 と Unicode

Perl 5.8

perl5.8のUnicodeサポート

ネットワーク

ネットワークプログラミングの基礎知識

スタイン,リンカーン (著)・クイープ (訳)『Perlネットワークプログラミング―ソケットの使い方からクライアント/サーバーシステムの開発まで』(ピアソン・エデュケーション, 2002/12/20, 5985円)

ウォング,クリントン (著)・法林 浩之 (監訳)・須田 隆久 (訳)『Webクライアントプログラミング』(オライリー・ジャパン, 1997/09/29, 3045円)

LWP

その他

Perl コードの最適化

Storable

Wiki内の関連ページ