perl

Logfile::Rotate - perl でログをローテート

諸事情でlogrotate を使わないでスクリプトで自前でローテートしたいときがたまにあって、でも自力で hoge.log をhoge.log.1(.gz)、hoge.log.1(.gz)をhoge.log.2(.gz) にリネーム、、、なんてことやってたんだけど面倒くさくてやだなーと思っていたら素敵モ…

swatch exec で指定して他のプログラム実行させると、子プロセスがdefunct になってゾンビで生き続けてうざいので、Swatch::Actions のsub exec_command 内に local $SIG{CHLD} = 'IGNORE'; を足した

件名の通りで、内容は1つ前のエントリとほぼ同じ。 # diff -u /usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm.org /usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm --- /usr/lib/perl5/vendor_perl/5.8.8/Swatch/Actions.pm.org 2013-03-06 14:0…

perlでforkした子プロセスを投げっぱなしにする

親プロセス側はdaemon的に常駐させて、子プロセスだけ先に終了するような場合で、waitpid で待たなくても良い場合はSIGCHLD を受けても無視するようにすれば良いようだ。 $SIG{CHLD} = 'IGNORE';

nginx + perl + fastcgi

http://www.ruby-forum.com/topic/145858 http://library.linode.com/web-servers/nginx/perl-fastcgi/ http://library.linode.com/web-servers/nginx/perl-fastcgi/centos-5 http://d.hatena.ne.jp/Kmusiclife/20111107/1320678141 install fastcgi # yum i…

Kyoto.pm Tech Talks 02 でSys::VirtとSys::Guestfsについて発表してきた

http://kyoto.pm.org/entry/2012/07/29/195512 主催者のid:shiba_yu36 さん、また会場を提供して頂いたはてな/はてなスタッフの皆さんありがとうございました&お疲れさまでした。 perlでkvm (libvirt) を操作する話をしてきました。ちょっと緊張してしまっ…

libguestfsのperl binding Sys::Guestfs で仮想マシン image のデータにアクセスする

http://libguestfs.org/ http://libguestfs.org/guestfs-perl.3.html Sys::Guestfs はcpanにはないので、libguestfsのとこからとってくる or package からinstallする。ちなみに↑のURLのsynopsys は間違っている(古い内容?) なのでinstallした後のperldoc S…

CentOS 6 perl 5.10.1 でPersistentPerl がmake できない

ナズェ? # cpan > look PersistentPerl # make make[1]: ディレクトリ `/root/.cpan/build/PersistentPerl-2.22-FqO72S/src' に入ります make[1]: `all' に対して行うべき事はありません. make[1]: ディレクトリ `/root/.cpan/build/PersistentPerl-2.22-FqO7…

Sys::Virt で仮想マシンに割り当てられているVNC port を取得する

http://search.cpan.org/dist/Sys-Virt/lib/Sys/Virt/Domain.pm perldoc Sys::Virt::Domain を見ても"vnc" という記述が見当たらないので直接取ってくることはできなさそうだけど、get_xml_description で仮想マシンの情報をxmlで取ってきて、そこのgraphics…

perlのpackを使ってascii/binary 変換

https://gist.github.com/2716377 $ perl -ne 'print unpack("H*", $_)' < ascii > binary $ perl -ne 'print pack("H*", $_)' < binary > ascii perl便利ですね。別にB-CASをクラックしようとかそういうこと考えてるわけではないです。

perlbrew install

defaultでは $HOME/perl5/perlbrew 以下にinstallされる。変更したい場合は環境変数 PERLBREW_ROOT を設定。 $ export PERLBREW_ROOT=/path/to/perlbrew_root/ install perlbrew $ curl -kL http://install.perlbrew.pl | bash $ source ~/perl5/perlbrew/et…

Test::System::Config で サーバの設定をtest

perldoc Test::Config::System use Test::Config::System tests => 4; check_package('less', 'package less'); check_package('emacs21', 'emacs uninstalled', 1, 'rpm'); check_link('/etc/alternatives/www-browser', '/usr/bin/w3m'); check_file_conte…

perl Sys::Virt でlibvirt APIを叩いてKVM 仮想マシンを操作する

Sys::Virt - libvirt のperl バインディング。virt-manager で出来るようなストレージの設定や仮想マシンの起動、停止、削除、設定変更などが可能。(自分で確認したのは仮想マシンを操作するSys::Virt::Domain のみ)久しぶりに触ろうとしたら忘れすぎて悲惨…

perlの標準入力で文字コードを指定するときの foo.pl foo.txt と foo.pl < foo.txt の違い

知らんかった。 http://blog.livedoor.jp/dankogai/archives/50759241.html http://chalow.net/2007-02-07-1.html ex: utf8で書いたtextを読んで文字数(byte数ではなく)を数えたい。 foo.txt 4文字のファイル作る $ echo -n ほげほげ > foo.txt foo.pl 文字…

psgi と cgi の変換

とある管理サーバで一つの管理用cgiを動かさないといけないんだけど、httpdはinstallされていない。たかが1cgiのためだけにapache installするのもなんだかなー、と思って調べた。本当は変換なんかしなくて、psgiアプリで書いてplackupすればいいんだろうけ…

YAPC::Asia 2011 Tokyo 参加してきました

http://yapcasia.org/2011/ 今年も行って来ました。参加者多いなー?と思っていたら、どうやら過去最多の人数が参加されてたようです。perlすごいですねperl。 例によって各talkの詳細なreportはgihyoやその他 perl mongers 達が素敵にまとめてくださってい…

Path::Class でfile/directory操作

http://perl-users.jp/modules/path_class.html OSに依存しないパスを作成できる。あとpathの結合とか。(File::Specみたいに) その他ファイルの読み込みなども可能。ディレクトリ以下のfilename表示もopendir使うよりわかりやすい。例えば、ディレクトリ下の…

Net::SSH::Perlで"Net::SSH: Can't bind socket to port 1023: アドレスは既に使用中です" と言われてしまう件

rootユーザ、かつ日本語ロケールでscriptを実行すると、Net::SSH::Perl->new() のとこで # perl hoge.pl Net::SSH: Can't bind socket to port 1023: アドレスは既に使用中です at hoge.pl line 10となって困った。sourceで"Can't bind socket to port" と書…

perl でSTDOUT への出力を一時的に無効にしたい

どうやるんだろう。*STDOUT とかの型グロブを操作するとか、tie を使うなどで出来そうな気がする。普通にclose STDOUT; したら出力は止まるけど、その後 open する方法がわかんないので。。。 追記 一時的に無効にしたい箇所を{}で囲んで、その中でlocal *ST…

perl - Time::Piece で日付を計算

perldoc Time::Piece http://d.hatena.ne.jp/hirose31/20100916/1284628891 http://d.hatena.ne.jp/perlcodesample/20091105/1246274997 perl 5.8には時刻を扱う標準モジュールがなくて、たいていCPANのDateTimeを使ってたんですが、DateTimeは巨大?で依存モ…

IPC::Shareable を使ってforkしたプロセス間で変数を共有

http://d.hatena.ne.jp/ZIGOROu/20090112/1231756261 やりたいことが、まんま同じだったのでとても参考になった。forkしている場合、普通に変数を使っていても共有できない(push @array, $foo とかしても@array が共有できない)のでIPCで共有。 変数の表示で…

perl でzip 展開

IO::Uncompress::Unzip Archive::Zip さらっとperldoc 読んだ感じでは、IO::Uncompress::Unzip のほうが使いやすいかなーと思った。メソッド名が短くて書きやすいことと、複数のファイルを圧縮しているとき(multiple compressed files) に、特定のファイルだ…

CGI(perl)内でforkしてbackgroundで走らせたい

userには素早くresponseを返して、重たい処理等はbackgroundで続けたい、みたいな。恐らく今時の(というか真面目な)方法なら、 TheSchwartz あたりの job server を用意して、CGIではenqueue しとけばいいのだろう。で、後はjob workerがせっせと頑張る。だ…

pod2html で日本語使うとリンクのアンカーが"_"になって困る

困る。困ってたけど、誰かが解決してくれてた。 pod2html の日本語ヘッダへのアンカーをWikipedia風に変更 これ素敵。ついでなのでpod2html のソースみてみた。pod2htmlの中身はuse Pod::Html して pod2html @ARGV してるだけなので、perldoc -m Pod::Html …

unicode の 16進数表示

http://mikeneko.creator.club.ne.jp/~lab/kcode/uni-encode.html "あ" を E3 81 82 に変換する。 文字コードは全部utf8で。 echo と xxd 使う xxdじゃなくてhexdump、od -t x1 とかでもいい。 $ echo -n あ | xxd -g1 0000000: e3 81 82 ... perl の pack …

最近のCPANモジュールを使ったメール送信

http://perl-users.jp/modules/email_send.html perl-users でEmail::Send 使えばいいよって書いてたので、Email::Sendを使ってたんですが、ふとperldoc Email::Send みてたら Email::Send is going away... (略) As of today, 2008-12-19, Email::Sender is…

perlで暗号/復号

http://d.hatena.ne.jp/naoya/20050714/1121351719 Crypt::CBC "-cipher => BlowFish" とすることで内部的にCrypt::BlowFishを使ってくれ、いい感じに暗号/復号できる。

今年もYAPC::Asia Tokyo 2010 に参加

するために日比谷で前泊してます。色々やってたらこんな時間に。。。 ねもたい。

Scope::Guard - scopeから抜けるときにcoderefを実行する

use Scope::Guard; my $sg = Scope::Guard->new( sub { warn "hogehoge"; }); とすると$sg がscopeから抜けるとき(このコードだとexitしたとき)にcoderefが実行される。すごい!

ファイルハンドルへの出力をバッファしない(フラッシュする)

標準出力は$| = 1だけでいいけど、ファイル開いてるときは・・・?というのを知らなかったのでperldocとか見てたらわかった。selectで切り替えれば良いのか。 標準出力へフラッシュする # $OUTPUT_AUTOFLUSH at use Engilsh; $| = 1; 開いているファイルハン…

コード内でlocaleを変更する

perldoc perllocale - "The setlocale function" section use POSIX qw(setlocale LC_ALL); setlocale( LC_ALL, 'C' ); コードの初めから最後まで、特定のlocaleにするだけならLANG=C; perl hoge.pl するとか、シェルスクリプト内でLANC=Cを書くって方法でも…