「PerlTips」の版間の差分
(→ディレクトリ操作) |
細 (→Perl 5.8 と Unicode: URL not found) |
||
行120: | 行120: | ||
perl5.8のUnicodeサポート | perl5.8のUnicodeサポート | ||
*http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html | *http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html | ||
− | |||
− | |||
− | |||
== ネットワーク == | == ネットワーク == |
2011年1月17日 (月) 15:17時点における版
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;
- http://www2u.biglobe.ne.jp/~MAS/perl/waza/ashuffle.html
- http://monkeyness.com/perl/cookbook/ch04_18.htm
- 配列操作、参考サイト
日付
ファイルのタイムスタンプを取得。
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 |");
のようにする。
数値とバイナリの変換
- http://mikeneko.creator.club.ne.jp/~lab/perl/numerical_transform/
- http://mikeneko.creator.club.ne.jp/~lab/
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
- http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP#i3
- http://homepage3.nifty.com/hippo2000/perltips/LWP.html
- http://homepage3.nifty.com/hippo2000/perltips/LWP/Simple.html
- http://homepage3.nifty.com/hippo2000/perltips/lwpcook.html
その他
Perl コードの最適化
Storable