Perl - モジュール管理

開発環境で carton install してできた local ディレクトリをそのまま本番環境に持っていけばいいと思う。

Perl - Plack::Middleware::StatusHtml を書いた

web サーバの死活監視として /status.html へアクセスしてみるということをよくやると思う。 ということで、これだけをやる Middleware を書いた。 https://github.com/shoichikaji/Plack-Middleware-StatusHtml 例 外部ファイルに http status code を書い…

Perl - Amon2::Plugin::Web::Github::Webhook を書いた

https://github.com/shoichikaji/Amon2-Plugin-Web-Github-Webhook github webhook アプリをつくろうとしたとき github からのアクセスのみに制限したい x-github-envent ヘッダーに簡単にアクセスしたい body parameter payload に簡単にアクセスしたい と…

今日知ったこと

x.pl print __PACKAGE__, "\n"; を実行するともちろん、 main と出力される。 一方、 y.pl package Y; do "x.pl"; を実行すると、Y と出力される。 疑問だった http://ks0608.hatenablog.com/entry/2013/09/16/040838 は application が Plack::Sandbox::XXX…

Perl - Amon2::Plugin::Web::Text

https://github.com/shoichikaji/Amon2-Plugin-Web-Text text/plain な response を返したいときがよくあるので plugin にしてみた。 SYNOPSIS use Amon2::Lite; __PACKAGE__->load_plugins('Web::Text'); get '/' => sub { my $c = shift; return $c->rende…

Try::Tiny::Retry is awesome!

https://metacpan.org/release/Try-Tiny-Retry Perl で retry 処理を書くとき、Sub::Retry をよく使っていた。 これの唯一の不満がすべての retry が失敗ときの処理を書きたいとき、自分でキャッチするコードを書かなければいけないところだった。つまり use…

Perl - App::Path::Maker というやつを書いた

何かしらのひな形となるファイルやディレクトリを作りたい場面がよくある。 要するに 簡単なテンプレート機能 ファイルやディレクトリを簡単に作る機能 が欲しい。こういったとき、その場限りのものを自作しようか、ちゃんとしたモジュールを使うべきかなど…

Perl - carton exec 省略

Perl のアプリを carton で管理し開発していると、毎回 > carton exec ... と打たないといけないからちょっと面倒。そんなときアプリのディレクトリトップに DIR=$(cd $(dirname ${BASH_SOURCE:-$0}) >/dev/null; pwd) export PATH=$DIR/local/bin:$PATH exp…

Perl - minil add コマンド

Minilla に 新しいファイルを追加する minil add コマンドを加えてみた。 https://github.com/shoichikaji/Minilla-CLI-Add 使用例 % minil new My::App % cd My-App % minil add My::App::Anothor Retrieving meta data from lib/My/App.pm. Writing /Users…

perl -e 'sleep 1; die' の exit stauts

perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? の結果が % perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? darwin, 5.018001 60 % /usr/bin/perl -e 'print "$^O, $]\n"; sleep 1; die' 2>/dev/null; echo $? darwin, …

perl のインストール

http://www.cpan.org/src/README.html perlbrew, plenv とか、はたまた perl-build とか xbuild とかいろいろあるけど、たいていの場合ただ単に wget http://www.cpan.org/src/5.0/perl-5.18.1.tar.gz tar -xzf perl-5.18.1.tar.gz cd perl-5.18.1 ./Configu…

Perl - lib::relative というのを書いた

https://github.com/shoichikaji/lib-relative use FindBin qw($Bin); use lib ("$Bin/extlib/perl5", "$Bin/lib"); を use lib::relative qw(extlib/lib/perl5 lib); のようにかけるモジュールを作ってみた。 .... というか既にこのようなモジュールあるの…

Perl - clessc のバインディング

clessc - A C++ implementation of the LESS CSS Compiler の perl バインディングを書いてみた。 https://github.com/shoichikaji/CSS-clessc なんとなくできたが 外部の src をどのように build したらいいかよくわからない。 本当は ./configure && make …

Perl - std::string の typemap

memo TYPEMAP string T_STRING OUTPUT T_STRING $arg = newSVpvn( $var.c_str(), $var.length() ); INPUT T_STRING $var = string( SvPV_nolen($arg), SvCUR($arg) );

Perl - アクセッサ

sub field { shift->{field} } sub field { $_[0]->{field} } のどちらの方が速いのかはかってみたら、 shift の方が速かった。完全に逆だと思ってた。 #!/usr/bin/env perl use strict; use warnings; use Benchmark qw(cmpthese); package Dummy { sub new…

Perl - carton で管理しているやつをfatpackする

carton で % tree . ├── cpanfile ├── cpanfile.snapshot ├── lib │ └── MyClass.pm ├── local │ ├── cache ... │ └── lib │ └── perl5 │ ├── Net ... │ ├── Parallel ... │ └── darwin-2level ... └── script.pl のようにして管理しているとき、 script.pl …

Perl - plackup したとき

use strict; use warnings; sub body { 'body' } sub { [200, [], [ body ]] } を plackup したときは問題ないが use strict; use warnings; sub body { 'body' } package Dummy; package main; sub { [200, [], [ body ]] } にして plackup すると Error wh…

Perl - New slice syntax for 5.19.4+

http://www.nntp.perl.org/group/perl.perl5.porters/2013/07/msg204023.html perldelta.pod The new %hash{...} and @array[...] syntax returns a list of key/value (or index/value) pairs. (おそらく @array[...] は %array[...] の間違い) perl 5.19.4…

Perl - Caroline を使ってみた

tokuhirom / Caroline - Yet another line editing library インタラクティブなシェルのようなものを簡単に作れる。 試しに、remote と local で行ったり来たりできる scp をし易くするスクリプトを書いてみた。 ssh の接続を保ちつつ、local, remote で ls …

プロセス置換 on freebsd

cat <(ls /usr/bin) を プロセス置換 (Process substitution) と言うらしい。 freebsd6上の bash3.2 で plenv を使おうとしたところ、 plenv-version-file-read 17行目のプロセス置換で /dev/fd/63: No such file or directory のようなエラーがでてしまいち…

perl with gcc2.95

FreeBSD 4.11, gcc2.95 というレガシーなマシンで perl5.18 を使ってる。 特に問題なく動いていたけれど、C++なXSモジュールをビルドしようとしたところ、 ...i386-freebsd/CORE/perl.h:1703: badly punctuated parameter line in `#define' ...i386-freebsd…

Perl - Parallel::FileRead

Parallell::FileRead というのを書いた。 例えば10GBの大きいログファイルを処理しようとしているとき use Parallel::FileRead; Parallel::FileRead->run( file => '10GB.log', worker => 5, # how many workers on_worker => sub { my ($fh, $index) = @_; …

Perl - File::pushd

File::pushd が { $dir = pushd "/usr/local"; ... } より pushd "/usr/local" => sub { ... }; みたいにかけた方がかっこいいと思ったので書いてみた。 #!/usr/bin/env perl use strict; use warnings; use Cwd qw(cwd); sub pushd { if (@_ == 1) { my $ta…

perl -e 'local $?; exit 1'

% perl -e 'local $?; exit 1'; echo $? 0 % perl -e '$? = 2; { local $?; exit 1 }'; echo $? 2 % perl -e '$? = 2'; echo $? 0 % perl -e 'END { $? = 1 }'; echo $? 1 % perl -e 'END { local $? = 1 }'; echo $? 0 perlipc をみながら、$SIG{CHLD} のと…

Perl - 子プロセスの終了ステータスの調べ方

http://perldoc.perl.org/functions/system.html # sample.pl system @ARGV; if ($? == -1) { print "failed to execute: $!\n"; } elsif ($? & 127) { printf "child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without'; }…

Perl - 日付処理

今日から後ろ10日間、とか、今日から前 10 日間の日付を欲しいときイテレータを使うとラク。 #!/usr/bin/env perl use strict; use warnings; use 5.010; use Time::Piece; use Time::Seconds; my $iterator = date_iterator( base => Time::Piece->new, dur…

Perl - 大きいログファイルを処理する

1ファイル数ギガとかあるログファイルを一行ずつ処理したいとき、いくつか fork して、worker1 は 0MB-500MBを処理、worker2 は 500MB-1000MBを処理, .. みたいにやると意外に簡単にできた。 #!/usr/bin/env perl use strict; use warnings; use utf8; use …

Perl徹底攻略

Perl徹底攻略を読んでる。UNIX プログラミングの勘所とWebアプリケーションのパフォーマンス改善が特にすばらしい。 ところで、UNIX プログラミングの勘所にある、中断可能なコードの書き方のところって sub do_some_work { ... my $len; { # 処理の開始前に…

32bit perl build on CentOS 6.4 64bit

yum install % sudo yum install glibc-devel.i686 libstdc++-devel.i686 Configure % ./Configure -des -Dccflags='-m32' -Dldflags='-m32' -Dlddlflags='-shared -m32' -Dprefix=$HOME/perl32 -Darchname=i686-linux perl-V % $HOME/perl32/bin/perl -V Su…

Perl - *DBM_Fileのインストール

Perl にはコアモジュールとして DB_File, GDBM_File, NDBM_File, ODBM_File, SDBM_Fileがある。 しかし、SDBM_File 以外は適切なライブラリ、ヘッダーがないとインストールされない。 例えば、ubuntu 12.04 にplenvでインストールした perl だと % perl -le …