perl

秘伝のタレ化していたmodule-setupをDist::Zilla化してみた (仮)

今まで秘伝のタレ化したmodule-setupのテンプレでモジュールのひな形を生成してたんですが、なういMakefile.PLやBuild.PLの書き方とかcpanfileとかMYMETA.*とかそのへんもろもろに追従するのがしんどくなってきたので、milla (Dist::Milla) を元に秘伝のタレ…

YAPC::Asia 2013でLT『How to inspect a RUNNING perl process』してきました&スピーカーへのお願い

YAPC::Asia 2013でLT『How to inspect a RUNNING perl process』してきました How to inspect a RUNNING perl process / YAPC::Asia Tokyo 2013 http://www.slideshare.net/hirose31/inspect-runningperl ハングアップとかメモリバカ食いとか、稀にしか発生…

How to prevent premature hsplit issue for EOL Perls

Dear EOL Perl (5.8, 5.10, 5.12) users, Devel::PatchPerl 0.86 was released yesterday.Now Devel::PatchPerl applies patch to fix CVE-2013-1667 against EOL Perls (5.8.8, 5.8.9, 5.10.1, 5.12.5).I suppose we will be able to get fatpacked patchpe…

p

use Data::Dumper; $Data::Dumper::Indent = 1; $Data::Dumper::Deepcopy = 1; $Data::Dumper::Sortkeys = 1; $Data::Dumper::Terse = 1; sub p(@) { my $d = Dumper(\@_); $d =~ s/\\x{([0-9a-z]+)}/chr(hex($1))/ge; print $d; } my %very_complex_data = …

aws-cliのラッパーモジュールを作りました - AWS::CLIWrapper

先日公開されたaws-cliのPerlのラッパーモジュールを作りました。 https://metacpan.org/module/AWS::CLIWrapper https://github.com/hirose31/AWS-CLIWrapper PerlでAWS EC2のAPIを叩くにはNet::Amazon::EC2が便利です。一昔前に比べると多くのAPIに対応し…

perlbrewを使うにあたっていろいろな小細工をした件

最近perlbrewを使っています。で、いろいろ小細工をしたので問題点とその解決方法のまとめです。補足すると、深遠な理由とかマリファナ海峡より深い事情とかがなければ、バッチ用、shebang用に(↓で書いてる)appperl的なラッパーを用意するだけでいけるんじゃ…

perlbrewなperlで共通のパスを@INCに入れたい、もしくはperl実行時にごにょごにょしたい話

perlbrewでインストールしたperlたちの@INCは$PERLBREW_ROOT配下のディレクトリになります。おかげで互いに影響せずにモジュールを入れられるわけですが、システム全体で共通のモジュールも読ませたい局面もあります。PERL5LIB(でパスを指定)やPERL5OPT(で-M…

Time::Piece とタイムゾーンの甘い罠

use Time::Piece; use Time::Seconds; use POSIX qw(strftime); sub print_tp { my $tp = shift; printf("date : %s\ntzoffset: %d\nepoch : %d\nstrftime: %s\n\n", $tp->strftime('%Y-%m-%d %T'), $tp->tzoffset, $tp->epoch, strftime('%Y-%m-%d %T', loc…

安全に一気にファイルの内容を書き換える

ファイルを書き換えるときに、単純に open, write, close だと、そのファイルの性格にもよりますが、問題になるケースがあります。 書き込み処理中に異常終了しちゃった 例えば open my $fh, '>', '/foo/bar'; print $fh gen_header(); print $fh gen_sectio…

コンテキストによって返す値を変える関数 - use Want 編が微妙な件

HASHかどうかの判別がなんかへんなのに気がついた。mainでの判別は問題ないんだけど、ほかのpackageのメッソッド内の map の中だと HASH かどうかの判別ができない。下のコードでは自packageだけど、ほかのクラスの中でkureを読んだ場合も同じように map の…

コンテキストによって返す値を変える関数 - use Want 編

リストコンテキストかどうかは組み込み関数の wantarray で調べられますが、コンテキストによってスカラ(文字列)を返したり、ハッシュのリファレンスを返すには use Want すればいいと教えてもらったのでメモ。 my $server = OrenoServer->new(...); # want …

ファイルだけじゃなくてディレクトリも監視できます

inotifyはファイルだけじゃなくてディレクトリもウォッチできて、配下にファイルが作られたり消されたりなどなどを監視できます。 $ watch-it.pl ~/tmp (ls) tmp - IN_ISDIR IN_OPEN tmp - IN_ISDIR IN_CLOSE_NOWRITE IN_CLOSE (echo test > foo) tmp/foo - …

ファイルの変更を監視して、任意のコマンドを実行するスクリプト

d:id:hirose31:20070528:1180326347 のobserve-mtimeは、ファイルのmtimeの変更を定期的に確認してイベントを発火させてたんですが、それをLinuxのinotifyで置き換えてみました。mtime監視だと調べてスリープしての繰り返しなので、変更してからイベントが起…

Net::GrowlClientのほうがよさげ

ネットワーク(UDP)越しにNet::Growl@Linux → Growl-1.2.2@Macへ通知送ろうとしたがうまくいかない。 自ホスト(Mac)からならNet::GrowlでもgrowlnotifyでもOKなんだけど。ちょっとふごふごしてみたけどだめだった。で、CPANいったらNet::GrowlClientという…

dirtree.plつうはずかしいコードをコミった

もっと直感的に(あまり考えずに)、探せるコマンドはないのかなあと思って tree コマンドを使ってみた。 tree コマンドが便利 - IT戦記 no kyプラグマを使って2001年(最初の版は1999年)のコードをはずかしげもなくコミったのがこれ。 http://coderepos.org/…

Class::Component その2

※ 例文中の個人名などは架空のものです。 やりたいこと 人によって自転車の色は異なる。色の情報は外部のデータファイルとかDBとかにある。色の情報は最初に調べておいて、聞かれたらすぐに答えられるようにしておきたい。 やれることは全部やりたい。 やっ…

YAML::DumpとかJSON::objToJsonみたいな感じでshのsyntaxでダンプru

例外処理とかユルユルですが。 #!/usr/bin/env perl # Time-stamp: <2007-10-09 20:01:58 JST, hirose31> use strict; use warnings; use utf8; use Carp; use String::ShellQuote; use Test::Base; ### ==================================================…

KanjiManもJitensyaに乗せてあげたい

PluginとかはHStaff::Plugin::*に。 NaoyaやKanjiManはHStaffを継承。 #!/usr/bin/env perl use strict; use warnings; use Naoya; Naoya->new->bell; use KanjiMan; KanjiMan->new->bell; package HStaff; use strict; use warnings; use Class::Component;…

curry

#!/usr/bin/env perl # Time-stamp: <2007-08-02 13:36:56 JST, hirose31> use strict; use warnings; use Test::Base; sub curry { my($func, @argv) = @_; sub { &$func(@argv, @_); } } sub add { return $_[0]+$_[1]; } sub sum { my $sum; $sum += $_ f…

POEなスクリプトをプロファイリングしたいの

Devel::DProfだとセグフォる。 $ perl -d:DProf poe-poe-poe.pl Segmentation fault (core dumped)POE::Devel::Profilerというのがあったので試してみた。 が、dprofppやgprofに比べるとサマれる情報が少ない。 $ perl -MPOE::Devel::Profiler poe-poe-poe.p…

POE::Loop::Epollがなくなってる?

どこいっちゃったんだろ。。。

Assurer::Plugin::Test::SSH::SupportedAuth

package Assurer::Plugin::Test::SSH::SupportedAuth; use strict; use warnings; use base qw( Assurer::Plugin::Test ); use Net::Scan::SSH::Server::SupportedAuth qw(:flag); use Assurer::Test; sub register { my $self = shift; $self->register_tes…

SSHサーバが受け付けている認証方法を調べるPerlモジュール

を、CPANに上げしました。 Net::Scan::SSH::Server::SupportedAuth 予め Math::BigInt::GMP をインストールしておくのをお勧めします。じゃないと、Net::SSH::Perl (が使っている Crypt::DH) が遅くて、まともに使えませんので。 このモジュールは、SSH prot…

元のメソッドを保存しつつオーバーライドしたい

とあるメソッド(Foo#greet)を呼ぶ前にちょっとごにょごにょ前処理的なことをしたい。 前処理した後は、オリジナルのメソッドを呼びたい。 でも、メソッド名はそのまま(greet)でコールしたい。こんなんでいいのかなぁ? #!/usr/bin/env perl use strict; …

Smart::Commentsとeach

#!/usr/bin/env perl my %hash = ( foo => 'one', bar => 'two', baz => 'san', ); ### %hash while (my ($k, $v) = each %hash) { print "W $k\n"; } print "F $_\n" for keys %hash; print "bye\n"; $ perl t.pl W bar W baz W foo F bar F baz F foo bye$…

TTで値入れ忘れたときにぷぎゃってほしい

$templateにあるけど%varsにはないのがある、つまり%varsに値をセットし忘れているときに、 それとわかる文字列(「FIXME」とか)に置換するか processがエラーになる ようにはできないものかとドキュメントとソースとにらめっこ中。例えば、 #!/usr/bin/env p…

SSHサーバが受け付け可能な認証方法を列挙する

もっとスマートな方法ないかしらん。 #!/usr/bin/env perl use strict; use warnings; use Net::SSH::Perl; use Net::SSH::Perl::AuthMgr; QUICK_HACK: { package Net::SSH::Perl::AuthMgr; no warnings 'redefine', 'once'; *auth_failure = sub { my $amgr…

Net::SSH::Perlが遅いときは

Math::BigInt::GMP をインストールしたら速くなったよ!正確に言うと、Net::SSH::Perlが必要としているCrypt::DHが必要としているMath::BigIntは、Math::BigInt::GMPかMath::BigInt::Pariがインストールされてないと激しく遅い、ということぽいす。 Math::Bi…

Net-SSL-ExpireDate-1.04 (予定)

IO::Socket::SSL-0.97だとSegmentation faultする。少なくとも0.99なら問題なしっこ。(最新は1.04)0.97(を含んでそれ)以前と、それより後から現在までとではauthorが違う(behroozi→sullr)んで、その間でcore dumpを引き起こす差異があるんではないかと…

*.tのときはmode-compileでperlじゃなくてproveを実行したい

インスパイア: unwind-protect: Emacs の中から proveemacs-proveはそのまんまいただいて、~/.emacsにこんな感じで。(lisp 10級)これでいつでもC-cC-cで、ファイル名を見て適宜perl -wかprove -vlを実行してくれます。 (autoload 'mode-compile "mode-compil…