うまいぼうぶろぐ

linuxとhttpdとperlのメモ

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を書くって方法でも…

File::Tail - 定期的にログを監視する

daemonチックなプログラムの時に便利。swatchもこれを使ってる。 use File::Tail; my $file = File::Tail->new( name => "/var/log/httpd/access_log", interval => 1, maxinterval => 5, ); while (my $line=$file->read) { print "$line"; } ログにしばら…

Params::Validateでパラメータのチェック

perldocでソース読んでたら出てきたので。メモ初級編。サブルーチンで使うと幸せになれそうですね。 引数が与えられたかどうかのチェック 型までは見ない。 use Params::Validate qw(:all); sub foo { my $args = validate( @_, { hoge => 1, ## mandatory (…

perlでNetAppをごにょごにょ

Phillip Moore / NetApp-1.1.2 - search.cpan.org cpanにNetAppモジュールがあったのを発見したので。さっそく使おうとしたけど、たぶんNetApp::Filer がおかしい?くてtelnet loginできない。まぁtelnetやめてsshにしろっていう話でもあるけど。 perldoc -m…

スカラコンテキストでのglob関数の挙動がよくわからない

なんか初歩的なんですけど。以下のファイルがある状態で。 $ ls [abcd] a b c d次のコードを実行。 use warnings; use strict; my @file = qw(a b c d); print "### scalar context\n"; for my $file (@file) { print scalar glob $file; print "\n"; } prin…

perlでfork

use warnings; use strict; my $pid = fork; if ($pid) { ## parant process } else { ## child process } waitpid($pid,0); waitpidをしなかったら、子プロセスが残っていても親プロセスは先に終わってしまう。 指定した数だけfork my $max_process = 10; m…

Smart::Commetns

今さらだけど、めちゃ便利ですよね。デバッグ終わったらuse Smart::Comments; をコメントして無効にすればいいだけだし。プログレスバーとか便利便利

perlでRegex::Listを使って正規表現を効率良く書く

例えば qr/foobar|fooxar|foozap|fooza/ と書くと左の単語から1つずつ順番に評価されるので数が多いと性能が落ちる。それを、カッコでグループしてくれたりして最適化してくれるモジュール。 use Regexp::List; my $l = Regexp::List->new; my $re = $l->lis…

Spreadsheet::WriteExcel のformatがよくわからない

use Spreadsheet::WriteExcel; my $workbook = Spreadsheet::WriteExcel->new('./test.xls'); my $worksheet = $workbook->add_worksheet(); my $format = $workbook->add_format(); $format->set_border(1); $worksheet->write(1, 1, 'hogehoge', $format);…

perlでmixiボイスにpostする

今さらだけどWeb::Scraperとかの勉強がてらに書いてみた。 #!/usr/bin/perl use strict; use warnings; use WWW::Mixi; use Web::Scraper; use Encode; use File::Basename; my $mixi = WWW::Mixi->new('username', 'password'); $mixi->login; my $res = $m…

GetOptionsの引数を1つのハッシュに入れる

1個ずつスカラーに入れなくても良かった。 use Getopt::Long; GetOptions( \my %options, qw/help server port=i host=s/, ); あとは$options{host} とかで参照。

perl - Template Toolkit 勉強

HTML::Templateみたいな。HTML用だけではなく汎用的に使える。設定次第では出力時にhtml用にescapeとかもしてくれる。 http://e8y.net/mag/008-template/ perldoc Template CGI::ApplicationではPlugin::TTもある。 use Tempalte; my $tt = Template->new();…

YAML::TinyのDump

YAML::Tinyはpure perlなYAMLモジュール。YAMLとかと使い方はほぼ同じ。 ただ、blessされたオブジェクトは表示できない? use YAML::Tiny qw(Dump); package Hoge; sub new { my ($class) = @_; return bless {}, $class; } package main; my $hoge = Hoge->…

perl - HTML::FillInForm

cgiのデータをformに反映させる。formでサブミットされて、一部パラメータが不足しているときに再表示させる場合など。 my $query = CGI->new; ## $queryの処理 my $tmp = HTML::Template->new( filename => 'file.tmpl', associate => $query, ); my $form …

CGI::Application::Dispatch 勉強

http://rt.air-nifty.com/pods/CGI/Application/Dispatch.html#path_parsing run mode CGI::Application::Plugin::AutoRunmodeを使えば、run_modesをいちいち設定しなくても、PAHT_INFOから同一のメソッドを探す。そのメソッドには StartRumode : setupのsta…

CGI::Application::Dispatchのstartモード

start というrmを用意してないのに、アクセスしたら表示された。環境変数を吐いている確認用のページみたいなのが。なんだこれ。よくわかんないので上書きするか。

nimが動かなかったけど動くようになった

※ Mouseのverを0.52に上げたら環境変数を設定しなくても動くようになったようです http://twitter.com/samurai20000/status/11178631583 nimとは http://opensource.kayac.com/ja/projects/nim/ http://perl-users.jp/articles/advent-calendar/2009/casual/…

WWW::Mechanize付属のmech-dumpがbasic認証できない

どっか見間違ってるのかな。optionsには--userと--passwordがあるけど、それを指定しても認証とおらないんだけど。WWW::Mechanizeのversionは1.60. $ mech-dump --user=user --password=pass http://example.com/auth/page/ Error GETing http://example.com…

PersistentPerl(or mod_perlとか)でのmyとourとサブルーチンの引数に渡した場合の挙動の違いが良くわからない

http://daemoninc.com/SpeedyCGI/CGI-SpeedyCGI-2.22/README.html#FREQUENTLY_ASKED_QUESTIONS http://perldoc.jp/docs/modules/PersistentPerl-2.21/PersistentPerl.pod グローバルが実行の間で保持されます。例えば永続的なデータベース・ハンドルを保つと…

perlのflockでファイルの排他制御

http://www.tohoho-web.com/wwwperl2.htm#flock http://homepage1.nifty.com/glass/tom_neko/web/web_04.html#useflock flock(FILEHANDLE, operation) 1 読み込み宣言ロック(ブロックモード) 2 書き込み宣言ロック(ブロックモード) 5 読み込み宣言ロック(非…

perlのDBIのDEBUG

cliから実行するときにDBI_TRACE環境変数を設定。 perldoc DBI output appended to that file. If the name begins with a number followed by an equal sign ("="), then the number and the equal sign are stripped off from the name, and the number is…