====== perl ======
* [[catalyst]]
* [[perl:cgi_application_dispatch|CGI::Application::Dispatch]]
===== ちょっとした技 =====
カレントディレクトリ以下のpmファイルをまとめてperl -wcする
$ find . -name "*.pm" -exec perl -wc {} \;
Catalystのプロジェクトディレクトリではこんな感じで打つと自作モジュールも含めてlib以下のモジュールを一度に検査できる
$ find . -name "*.pm" -exec perl -Ilib -wc {} \;
==== 四捨五入 ====
0.5を足してintで良い筈
# 税込み価格
int($price + $price * $tax_rate + 0.5);
===== CPAN =====
CPAN設定、cpanシェルを起動して以下の操作、全部せっていするなら
CPAN> o conf init
個別に設定するなら
CPAN> o conf
で何が設定できるか見れる
==== ミラー ====
ftp.cpan.orgは遅い、遅すぎる。
CPAN> o conf urllist 何かCPANミラーのURL
ミラーはここから探せ http://mirrors.cpan.org/
==== 手動で入れる ====
サーバにインストールせずに使いたい、サーバにインストールできない場合、
Cモジュールを使ってなければ、適当な場所において use lib ... で動く。
CSV_XSみたいなCモジュールを使っているものは、CPANからtar.gzをダウンロードして展開
perl Makefile.PL PREFIX=/適当なパス
make
make install
上の例ならば
適当なパス/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/
にモジュールが設置される。このディレクトリ以下を丸ごとコピーするなり直接 use lib するなりお好きなようにやる。サーバでmakeが使えない場合でもOSとCPU種類が同じ別のマシンでコンパイルすれば大抵動く。依存モジュールがたくさんある場合は頑張る、もしくは諦めて違う方法を考える。
===== モジュールのバージョン確認 =====
C:\>perl -mXML::RSS -le "print XML::RSS->VERSION"
とか
===== Perldoc =====
==== ドキュメントを読む ====
perldoc -l XML::RSS
自分のコードでもpod形式で書いておくとperldocで閲覧できるので、モジュールやサブルーチンの説明はperldocで書こう。
==== モジュールのパスを調べる ====
perldoc -l XML::RSS
==== モジュールのソースコードを見る ====
perldoc -m XML::RSS
ページャはデフォルトでmore、ページャを指定するには環境変数PAGER、MANPAGER、PERLDOC_PAGERのどれかで指定。
===== 配列とリファレンス =====
リファレンスってなあに?という人はらくだの本とか読んで。
# 配列
@hoge = (1,2,3,4,5,6);
for ($i = 0; $i < scalar(@hoge); $i++) {
print $hoge[$i] , "\n";
}
# 配列のリファレンスを取得
$fuga = \@hoge;
for ($i = 0; $i < scalar(@$fuga); $i++) {
# 参照先の[$i]を取得
print $fuga->[$i];
# 実体にアクセスし、配列としてアクセス
print $$fuga[$i] , "\n";
}
# リファレンス先のの実体を配列としてアクセス
@piyo = @$fuga;
for ($i = 0; $i < scalar(@piyo); $i++) {
print $piyo[$i] , "\n";
}
# 配列へのリファレンスを作る
$puni = [1,2,3,4,5,6];
for ($i = 0; $i < scalar(@$puni); $i++) {
print $puni->[$i];
print $$puni[$i] , "\n";
}
===== リファレンス =====
# 実配列
@array = ();
@array = (1,2,4,5);
# 配列リファレンス
$ref_array = [];
$ref_array = [1,2,3,4,5];
# 配列のリファレンスを取得
$ref_array = \@array;
print ref $ref_array; # ARRAYと出力
$ref_array = [@array];
print ref $ref_array; # ARRAYと出力
# 配列要素にアクセス
$ref_array->[0];
# リファレンスを配列として扱いたいとき(push等のリスト操作関数に渡したいとき)はアタマに@を付けて
push @$ref_array, 6;
# 実ハッシュ
%hash = ();
%hash = (a => "hoge", b => "fuga");
# ハッシュリファレンス
$ref_hash = {};
$ref_hash = {a => "hoge", b => "fuga"};
# ハッシュ要素へのアクセス
$ref_hash->{a};
# ハッシュのリファレンスを取得
$ref_hash = \%hash;
print ref $ref_hash; # HASHと出力
$ref_hash = {%hash};
print ref $ref_hash; # HASHと出力
# ハッシュとして扱う
keys %$ref_hash;
my $hoge = 3;
my $ref_sub = sub {
return $_[0] * $hoge;
};
print &$ref_sub(4); # 12と出力
無名サブルーチンでクロージャが作れる