Perl

なぜController::Rootにuse Catalystしていたか不明

新しい自宅サーバで以前Catalystで作ったアプリを動作させる為の環境を作っていて、一通り、useするのに必要なCPANモジュールをインストールしました。何も考えずどんどん最新を入れていったのが間違いで、全然入らない。いくつかforce installしました。 in…

CPANシェルで"Error in server response, closing control connection."

新しい自宅開発用サーバにCentOS4.5をインストールした後、CPANシェル内で以下のようなエラーが発生。 --18:13:29-- ftp://ftp.dti.ad.jp/pub/lang/CPAN/authors/id/M/MS/MSCHWERN/CHECKSUMS (try: 1) => `-' Connecting to ftp.dti.ad.jp|202.216.228.228|:…

perltidyでソースコード整形

拙作のCPANモジュールであるLog::Facileのアップデートにあわせてコードの整形にperltidyを使ってみました。普段ついつい徹底できないですが、読むときはGNUコーディングスタイルが好きなので、-gnuオプションで。こういう作業は機械的にやる方がいいと感じ…

ハッシュかハッシュリファレンスを渡した直後の挙動の違い

最近は仕事がらみでJavaを触る事が多かったのですが、久しぶりに家でPerlをやっていてちょっとよくわからないことがあります。事象としてはYAML::SyckのDumpFileにハッシュリファレンスを渡すと、その直後の処理でそのハッシュを一度だけ使えなくなってしま…

CGI.pmでfavicon指定

以下のような自分用ツールのCGIにfaviconが指定されてなかったので指定しようとしたところ、よくわからず。 print header( 'text/html; charset=utf-8' ), start_html( -title => $TITLE, -style => "css/style.css", -charset => 'utf-8', -encoding => 'ut…

簡易アクセサ実装

CPANの片隅にひっそりとLog::Facileというモジュールがありまして、これは個人ユースを想定した簡易Loggerです。http://search.cpan.org/dist/Log-Facile/ちょっとツールなどつくるときに簡単にログ吐けると楽かなと思い作り始めたのですが、仕事が忙しくな…

Perlでlsコマンド

ワンライナーを作って遊ぶ夜更け。 perl -e 'opendir $d,".";print $_," " for readdir $d;'すぐに思いつくようなのしかひねり出せませんでした。27bytes。 追記:(9/25)コメントで通りすがりさんに教えていただきました。 perl -le 'map{print} glob(".*"),…

入力区切り文字

知らなかったです。ちょっとしたスクリプトを書くときによく"\n"って書いてたから便利。 [webmaster@localhost www]$ perl -e 'print 'hoge'.$/' hoge [webmaster@localhost www]$

Catalystのバージョンアップで継承方法がparent.pmに

Catalyst version5.7014では、helperスクリプトでつくった場合、デフォルトでのクラス継承のシンタックスが「use base」から「use parent」に切り替わっていますね(今更?)。helperスクリプトでcontrollerつくると package MyApp::Controller::Hoge; use s…

CentOSでの簡単なPerlバージョンアップ方法

うちの自宅のサーバはもっぱらCentOSなのですが*1、CentOS4.5を入れた直後のまっさらな状態だとPerlのバージョンは5.8.5です。いろいろ不都合なので新しいサーバの環境を整えるときはまずは5.8.8にバージョンアップします。せっかくyumがあるのでできればyum…

Weak references are not implemented in the version of perlが出た

朝起きるとApacheが死んでいて、なんだろうと思ってログをみると再起動がうながされて起動しようとしたらPerlのモジュール読込できずに死んでしまったようです。以下のログにもあるようにPerlのバージョンは5.8.8です。 [Sun Jul 06 04:02:45 2008] [notice]…

Text::CSV::BulkData-0.01 Released

とちょっとおおげさに書いてみました*1 Text::CSV::BulkData http://search.cpan.org/dist/Text-CSV-BulkData/ システム開発現場ではしばしば大量のテストデータを作成する機会がありますよね。私の関わるプロジェクトではCSVファイルを入力ファイルにして試…

CPAN Authorになりました

といっても、全く大したモジュールではないですが。登録の仕方など諸々理解したいというのもあったので、思い切ってうpしてみました。 XMLRPC::Lite::UpdatePing http://search.cpan.org/dist/XMLRPC-Lite-UpdatePing/ XMLRPC::Liteを使った更新ping送信の…

最短でマッチする繰り返しパターンで落とし穴

my $str = 'http://d.hatena.ne.jp/srkzhr/20080417/1208416359';こんな文字列があったとしてスラッシュ区切りで末尾から二つの数字続きの塊を別々にとろうとすると print "$1,$2\n" if $str =~ m{http://.+?/.+?/(\d+?)/(\d+?)}; print "$1,$2\n" if $str =…

コマンドラインからtwitterにpostする

Net::Twitterをそのまま使ってるだけですが、作業中にコマンドラインからtwitterにpostしたりとかしてます。twittershellを使ってみたりしたけど、ついfriendsとか打ってしまってすぐAPI制限にひっかかるので、、、*1postするだけの自作の簡易スクリプトを使…

組み込み関数のオーバーライド

useとかrequireとかExporterの復習にプログラミングPerlのモジュールの章(11章)を読んでいたら、組み込み関数のオーバーライドという変り種があって、試して遊んでみたのでメモしておきます。まず、このように単にchdirを前宣言しただけでは use Cwd; use …

モジュールのありか

.pmファイルがどこにあるか調べたいときがたまにあったりしますね。って、一時さんざん話題になってた話だけど。今更感たっぷりですが、自分が一番手軽かなと思う方法を書いておきます。 とりあえずどんな環境でも使えるのはこのやり方かなと。 -bash-3.00$ …

.nリネームでログを退避する

Linuxの/var/logの下のシステムログには一定の間隔やあるタイミングで古いログが退避されるものがあります。たとえばboot.logは一週間おきに退避されるとか。実際のシステム開発の現場でも、これにならって末尾に.nを付与していくという運用がよくなされます…

型グロブでサブルーチンのエイリアス

無名サブルーチンをレキシカル変数$refに入れると&$refで呼び出す感じになるわけですが、なんだか不恰好。やたらめったら使うべきではないんだろうけど、型グロブでエイリアスをつくってやれば、普通のサブルーチン呼び出しのようにして使えますね。 my $tar…

配列の長さ

配列の長さの求め方。プログラミングPerlにまとまっていたのでメモ。 use Perl6::Say; my @array = qw( hoge foo var ); say @array + 0; say $#array + 1; say scalar(@array); プログラミングPerl(1(volume 1))第3版 [ ラリー・ウォール ]ジャンル: 本…

イディオムの落とし穴

ウェブや書籍、雑誌で読んだ事でも、実際に失敗した経験がないと失敗してしまうという事がよくあります。WEB+DB PRESS Vol.43作者: 笠原辰仁,宗近龍一郎,高林哲,児玉サヌール,尾島良司,田中ばびえ,宮川達彦,小飼弾,的場聡弘,たつを,角田直行,きたみりゅうじ,…

アクセサの自動生成

最初はJavaのノリでゴリゴリとアクセサを書いてたんですが、CPANのソース読んでてなるほどClass::Accessor::Fastを使えばいいのかと。しかも、以下のように親のFooクラスでは「name」だけ、Fooを継承したFoo::Varクラスでは「name」と追加で「birthday」のア…

自作pmをuse libする

下にlibとかつくってそこにおいた自作pmをuseするとき、相対パスで呼び出してしまうと実行ディレクトリが違う場合(cronでまわしたりとか)に都合が悪かったりします。そこで、以下のようにBEGINブロック内でスクリプト自身のパスをとってきてからuse libと…

メール送信のスクリプトメモ

「件名」はFromやTo:と同じヘッダフィールドに入るため、文字コード変換だけではダメで、さらにMIMEエンコードしてやる必要があります。 use Jcode; my $subject = "件名"; my $body = "本文"; $subject = Jcode::jcode($subject)->shiftjis; $subject = Jco…

Perlネットワークプログラミングのメリット

[rakuten:book:11121444:detail] 前に標準ファイルハンドルとIO::Fileモジュールのベンチマークなんて事を試したりしましたが、この著書の第1章にあった説明を読んで「なるほど、そういう視点か」と思いました。IO::Fieは単なるラッパーなんだけど、IO::Sock…

シグナルを捕捉してみる

id:naoyaさんが紹介されていたこの本を読み始めました。Perlというより、ネットワークプログラミングの基礎がきっちり書いてあるので、ネットワークプログラミングの基礎が理解できていない自分にとっては、とても勉強になる書籍だと思います。 [rakuten:boo…

ハッシュの要素削除はdeleteで

ハッシュの要素削除はundefじゃなくてdeleteですね。undefだと値を未定義値にするだけです。 #!/usr/bin/perl use strict; use warnings; my %hash = ( hoge => "hogehoge", foo => "foofoo", var => "varvar", ); print "--- undef ---\n"; undef $hash{hog…

標準ファイルハンドルとIO::Fileモジュールのベンチマーク

IO::Fileと普通にファイルハンドル使うのとどっちが速いのかなぁと思い、ベンチマークスクリプトを書いて試してみました。Perlのバージョンは5.8.8です。 #!/usr/bin/perl use strict; use warnings; use IO::File; use Benchmark; my $file = "hoge.txt"; t…

UNIXコマンド呼び出しと組み込み関数のベンチマーク

Perlのベンチマークスクリプトを書いた事がなかったので、試しに書いてみました。シェルのlsコマンドを呼ぶ場合と、opendirしてループでreaddirする場合(=Perl組み込みのサブルーチンのみを使用)との性能比較です。 #!/usr/bin/perl use strict; use warn…

0埋め数字文字列だって数値変換される

当たり前すぎる話で恐縮ですが、「0埋め数字の文字列だって数値に変換されるんだなぁ」と何か妙に感心したりして。2桁の0埋め数字(例では"01")から三文字のアルファベットに変換するみたいな事をやって気付きました。 my $datetime = "2008-01-08 23:00:00…