perl

スタックトレースをHTMLで

オレメモ。 PlackならPlack::Middleware::StackTraceを使えばカンタンなんだけれど、深淵なる理由で使えぬ時はこんな感じで書き出してる。

VERSION MISMATCH in OpenSSL test program

ちょっとハマったのでメモしておく。 状況 $ cpanm Crypt::OpenSSL::CA (中略) Configuring Crypt-OpenSSL-CA-0.23 Running Build.PL Checking OpenSSL version number... *** VERSION MISMATCH in OpenSSL test program! *** The version number extracte…

perlにおける "-" と "--"の扱い

問1 curl -L http://cpanmin.us | perl - Task::Amon2 -nv がやっていることを正確に述べよ(10点) んー、自信なし。 ということで、真面目に調べてみる。 こういう時はじぶんで試行錯誤してみるのが吉。 test.pl #!/usr/bin/env perl use strict; use warn…

共有ロックと排他ロックと

perldoc -f flock http://perldoc.jp/func/flock flock FILEHANDLE,OPERATION FILEHANDLE に対して flock(2)、またはそのエミュレーションを呼び出します。 成功時には真を、失敗時には偽を返します。 (中略) OPERATION は LOCK_SH, LOCK_EX, LOCK_UN のい…

evalとreturn

#!/usr/env/perl use strict; use warnings; sub eval_func { eval { return 1; }; if ($@) { return 0; } } my $res = eval_func; printf "%s\n", $res; # $res is blank!!! ハマった。perldoc -f evalしてみると... In both forms, the value returned is …

Test::MockTimeとCORE::Globalと

Test::MockTimeの使い方にハマって調べたことをメモっておく。 Test::MockTime package Test::MockTime; ... BEGIN { *CORE::GLOBAL::time = \&Test::MockTime::time; *CORE::GLOBAL::localtime = \&Test::MockTime::localtime; *CORE::GLOBAL::gmtime = \&T…

Starting Mojolicious #2

Mojolicious::Liteのチュートリアルを読み進めるだけではあまり面白くなかったので、Yahoo TopicsのRSSを表示するかんたんなウェブアプリを書いてみた。 #!/usr/bin/env perl use utf8; use Mojolicious::Lite; use XML::Feed; use URI; get '/' => sub { my…

Starting Mojolicious #1

いろんなWAFに触れて知見を深めよう第一弾としてのMojo。 Hello World use strict; use warnings; use Mojolicious::Lite; get '/' => {text => 'Hello World!'}; app->start; と書いて $ morbo hello_mojo.pl [Sat Nov 10 09:44:52 2012] [info] Listening …

一定時間経過したら子プロセスをkillする

IPC::Cmdを使えばすっきり書けそうなのだが、コアモジュールに入ったのはv5.9.5から。 $ corelist -a IPC::Cmd IPC::Cmd was first released with perl v5.9.5 IPC::Cmdを使わないとするならこんな感じか。 #!/usr/bin/perl use strict; use warnings; my $p…

リストと配列は違うよ

xaicronさんの記事を見てしったわけですが... http://blog.livedoor.jp/xaicron/archives/51193668.html $ perl -E 'say scalar (@array=qw(foo bar piyo))' 3 $ perl -E 'say scalar qw(foo bar piyo)' piyo

get/setの帯域消費量

既存memcachedに対して新たにデータを投入する際に、「ネットワークの帯域圧迫しないか?」という心配があったので調べてみた。 以下、Cache::Memcached::Fastを使ってる前提で。 SYNOPSIS use Cache::Memcached::Fast; my $memd = new Cache::Memcached::Fa…

Socketについて - その1

どんな種類のサーバであっても深く理解しようと思ったら、Socketを避けて通れないのでここらで一念発起して勉強してみる。 sock(2) socket - 通信のための端点(endpoint)を作成する socket() は通信のための端点(endpoint)を作成し、ディスクリプター(descri…

doとrequireの違いがわからなくなったので調べてみた

まずはperldocを読むべし。 do EXPR Uses the value of EXPR as a filename and executes the contents of the file as a Perl script require EXPR demands some semantics specified by EXPR これだけだとよくわかんないので、 warn 'loaded'; { foo => 1}…

Config::Perl::Tinyというのを書いてみた

https://github.com/kotaroito/p5-Config-Perl-Tiny書いてみたといってもCPANにうpしたわけではない。 perl形式の設定ファイルをロードする方法をメモるついでに、CPAN形式でモジュールを書いてみようと思っただけ。あとGithubに置いてみたかったというくだ…

utf8フラグ付だとlengthは文字数を返す

マルチバイト文字の文字数カウント方法を調べたが、これが最もシンプルなり。 use strict; use warnings; use Encode qw(decode); my $str = 'あいうえお'; warn length($str); # 10 warn length(decode("euc-jp", $str)); # 5 便利!

Perl Hackers Hub UNIXプログラミングの勘所(3)

シグナルに関するkazuhoさんの講義(http://gihyo.jp/dev/serial/01/perl-hackers-hub/000603)を読みつつ、分からない基本コンセプトをOperating System Concepts作者: Abraham Silberschatz出版社/メーカー: John Wiley & Sons Ltd発売日: 2009/02/13メデ…

selectシステムコール

たまに聞くけどよくわからんので調べてみた。 perldoc select RBITS,WBITS,EBITS,TIMEOUT This calls the select(2) syscall with the bit masks specified, which can be constructed using "fileno" and "vec", along these lines: select(2) select() や …

forkとexecのお話

Perl Hackers Hub: UNIXプログラミングの勘所を読もうと思ったが、 「複製」と言っても,全部の情報が複製されるわけではありません。プロセスのメモリイメージが複製される(注2)一方で,プロセスが開いている「オープンファイル記述」(open file descrip…

Ukigumoを使う

Ukigumo::Serverは準備できたので、いよいよ「ゆるふわCI」を試してみる!Ukigumo::Clientというライブラリが用意されているので、とりあえずインストールする。 cpanm Ukigumo::Client でOK。調べてみるとどうやらCPAN形式でリポジトリ管理されているなら便…

Ukigumo-Serverのセットアップ

テストを継続的に回したいが、Jenkinsはtoo muchっぽい。なんか手軽にできる方法ないかなと思っていたタイミングでYAPCでのトークを聞いてUkigumoがあった、と思い出す。http://d.hatena.ne.jp/tokuhirom/20110909/1315566798 http://d.hatena.ne.jp/tokuhir…

Mac OS XでPlackインストール時に出るエラーの回避

Mac OS X(SnowLeopard)でcpanm Task::Plackすると、EVのインストールで止まってしまう、という状況に陥りました。調べてみると、「Lion で Plack をインストールすると EV のテストでエラーがでる。 」この記事まんまの状況で、たしかにXcode4を入れる前は問…

perlbrewとcpanmのセットアップ

perlbrew、cpanmそのものについては既に語りつくされてると思うので、自分のために手順だけ書いておく! 2011-10-22時点 curl -kL http://xrl.us/perlbrewinstall | bash echo 'source /home/kotaro/perl5/perlbrew/etc/bashrc' >> ~/.bashrc source ~/.bash…

YAPC::Asia2011にいってきた

去年に引き続きYAPC::Asiaにいってきました。今回で2回目。 おもしろかったなと思ったセッション ma.laさんの「Webアプリケーション高速化」 http://ma.la/files/yapcasia2011/高速化の手段は「努力、Hack、金」という3分類がすごくしっくりきた。 キホンは…

Perl Unixプログラミング - その1

Kazuhoさんの記事(http://gihyo.jp/dev/serial/01/perl-hackers-hub/000601)を読みながら調べたことをまとめてみる。 コード これはほとんど元記事そのまま。 use strict; use warnings; use Errno qw(:POSIX); my$dir='/tmp/kotaro/1'; unless (mkdir $dir …

fork/wait/exec

"Operating System Concepts"でこのあたり読んでたので、perlであれこれやってみる。 超基本 子プロセスをwaitし、exit statusを表示するという単純なことをやってみる。 my $pid = fork; die $! unless defined $pid; if ( $pid == 0 ) { sleep 1; exit 1; …

JSON-RPCを試す

"Operating System Concepts"でRPCのセッションを読んでたのだけど、イマイチ実感つかめないのでいい機会だからJSON-RPCを触ってみようと思った次第。なお、JSON-PRCの仕様はこちら。 http://json-rpc.org/wiki/specification Zigorouさんのエントリー見つけ…

__FILE__, File::Specなど

あるモジュールファイルのパスを取得したかったのだけど、最初やり方わからなくて苦労したのでメモ。 __FILE__ これを使えば、ファイル名を取得することができる File::Basename これを使うと、ディレクトリ名とファイル名を取り出すことが可能 use File::Ba…

Time::Pieceを活用せよ

これまでは perl -MTime::Piece -le '$t=localtime(); print $t' Fri May 20 10:50:18 2011| みたいに、UnixtimeからTime::Pieceオブジェクトつくる方法しか知らなかったけど、perldoc調べたらstrptimeで文字列パースできるじゃん! と思ったら、timezoneで…

オブジェクト生成コスト

オブジェクトをいっぱいつくると重いよーみたいなこと聞いたことあるけど、実際のところどれくらいコスト違うんだろう、と気になったので調べてみた。 引数を2倍にして返すという単純な関数でベンチマーク。 use Benchmark qw(:all); sub new { bless +{} =>…

PDTからJSTへの変換

ワンライナーで書いてみた。 perl -MDateTime -le '$hash=+{year=>2011,month=>3,day=>22,hour=>19}; $pdt=DateTime->new(%$hash, time_zone=>"America/Los_Angeles"); $tokyo=DateTime->from_epoch(epoch=>$pdt->epoch, time_zone=>"Asia/Tokyo"); print($t…