weblog of key_amb

主にIT関連の技術メモ

Perl

DateTime::Format::Strptime にパッチを送った話 #Perl

CPAN モジュールの DateTime::Format::Strptime は DateTime と同じ Dave Rolsky さんが開発しているもので、日付時刻を含む文字列のパースによく使われているのではないかと思います。 このモジュールの挙動が v1.58 から変わっていました。 #!perl use fea…

Gotanda.pm #8 で memcached-cli について喋ってきた #gotandapm #memcached

既に2回このブログで紹介している memcached-cli について、昨日開催された第8回 Gotanda.pm で LT してきました。 資料はこちらです。今回は Speaker Deck に上げてみました。 Speaker Deck だとスライド中のリンクが無効になる(?)ようなので、いくつか貼…

memcached-cli の v0.9.4 までの追加機能の紹介

3/24 の記事で、最近作った memcached-cli というツールの紹介をしました。 keyamb.hatenablog.com 別に困ってはいないのですが、もっと便利にしたので、Changes から抜粋して追加機能を紹介しておきます。 昨日か一昨日に手元に入れて試してみた、という方…

Memcached に対話的にコマンドを実行できる "memcached-cli" を作った

Redis*1 には redis-cli というツールがあって、Redis サーバに接続して対話的にコマンドを発行して、結果を得ることができます。 Memcached*2 の場合、いい感じに使えるツールがなくて*3、必要なときはいつも TELNET でつないでコマンドを実行していました…

Gotanda.pm #6 で障害について話してきた #gotandapm

こんにちは、@key_amb です。ご無沙汰しています。 最近ブログの更新が遅れてまして、なんとなく申し訳ない気持ちになっている今日このごろです。 なんと、2ヶ月も更新してなかったんですね。*1 さて、前回の Gotanda.pm #5 では、テーマ(「高速化」でした)…

吉祥寺.pm で Perl と Perl 以外の運用について発表しました #kichijojipm

7/10(金) 吉祥寺.pm #4 で発表をしてきました。 お題が「PerlとPerl以外」ということだったので、PerlとPerl以外のWebアプリケーションのサーバサイド運用について話そうかなーと思い、発表枠で申し込みました。 …で、下のスライドで話をしました。 PerlとPe…

YAPC::Asia Tokyo 2015 にトーク応募しました #yapcasia #appkoyomi

今年の YAPC::Asia Tokyo は 8月20〜22日に予定されています。 今年は最後の YAPC::Asia Tokyo ということで、トーク応募にも気合いの入ったエントリーが多いような気がします。 〆切は明日までとのことですが、これを書いている 6/14 現時点で 128個 のトー…

Shibuya Perl Mongers テクニカルトーク #17 に参加して #shibuyapm

6/2 に開催された Shibuya Perl Mongers テクニカルトーク #17 に参加してきました。 自分は初参加だったのですが、なんと前回開催から4年ぶりの開催とのこと。 「もうみんな Perl なんて書いてませんよね」というアイロニーな雰囲気が漂いつつも、「やっぱ…

(メモ) Pod::Simple::HTML による Perl ドキュメントのカスタム生成

Pod::Simple::HTML の POD に書いてある通りですが、Pod::Simple::HTML を継承したクラスを作って、生成する HTML をカスタマイズすることができます。 例えば、do_pod_link メソッドをオーバーライドすることで、L<...> で記述するリンクタグの挙動を変更で…

(メモ) Module::Build による Perl ドキュメント生成

Module::Build を使うとプロジェクトのドキュメント生成をビルドのタスクの一部として、かんたんなコマンドで実行できます。 ./Build docs # blib/ 以下にドキュメント生成 ./Build html # blib/ 以下にHTML生成 Module::Build でプロジェクトの対象ファイル…

ShipIt を使って Perl モジュールのリリース作業を自動化する

ShipIt は Perl プロダクトのビルド、テスト、リリースを自動化してくれるツールで、CPAN へのアップロードもできます。 今回は以下の作業を半自動化するために、ShipIt を利用しました。 モジュール群の VERSION インクリメント ChangeLog の更新 リリース…

(メモ) Perl の文字コード変換について

EUC-JP => UTF-8 な変換をしたくて、Encode.pm を使ったら化けたのだけど、Unicode::Japanese にしたら上手く行った。 use Unicode::Japanese; print Unicode::Japanese->new($content, 'euc-jp')->get; 参考 Unicode-Japanese-0.49 - Convert encoding of j…

(メモ) Perl でテストのときに依存する外部 daemon を上手く取り扱う

mysql とか memcached とか。 Harriet というのを使うといいらしい。 Harriet ー テストのときつかうにデーモンの取扱を簡単にするためのフレームワーク - blog.64p.org

Perl でテスト可能なスクリプトを書く

職場でとある Perl スクリプトを改修する機会があった。 元々ぺら一枚のスクリプトだったのだが、これを機に App::Hoge::CLI (仮称) のようなモジュールを作ろうとした。 すると、pull-request の時に「使い回しのできないものをモジュールにしないほうがい…

(メモ) Perl で動的にモジュールをロードする方法いろいろ

現在の結論 Module::Load::load でよさそう。 参考 Perl のモジュールローダー選定委員会 - blog.64p.org [技術継承の現場] useとrequireの違い - NDiS Tech http://perldoc.perl.org/Module/Load.html

Perl Module のバージョンを調べるいろいろな方法

半分メモです。 下の記事に色んな方法が載ってました。 モジュールのバージョンを確認するときどうやってますか? - JPerl Advent Calendar 2010 Casual Track 自分のシェル環境にもなにか入れておこうと思いました。 最初はかんたんに alias にしようかと思…

Perl で非ループなブロックで last を使う

if if ブロックを途中で抜けたいときにたまに使うことがありました。 if {{ # do something last if $error; # do something }} {{ にしているのがミソで、if {} の内側の {} がブロックということです。 eval eval は last で抜けられないのですが、同様の…

Perl 関数の Export/Import

Perl の標準モジュール Exporter を使った関数の Export/Import のやり方をまとめておく。 この機能を使って関数をインポートすると、"MyApp::afunc" のようにパッケージ名を指定せずとも関数を組み込み関数のように "afunc" だけで呼び出せる。 基本的な使…

Perl でプロジェクトのモジュール全部について use_ok のテストをしてくれるテストモジュール

See Test::UseAllModules - search.cpan.org use Test::UseAllModules; BEGIN { all_uses_ok(); }

File::Which を使って perl で which

See File::Which - search.cpan.org use File::Which qw(which); my @paths = which('perl');

メモ - Perl で Readonly の変数を変更してテストする

Julius Plenz - Blog - Modify a Readonly scalar in Perl for testing purposes の方法で上手く行った。

cpanfile で perl module を管理する

ちょっと前から plenv を使っていますが、作業環境が変わったときに毎回モジュールを入れ直すのが面倒なので、cpanfile を管理することにしました。 https://github.com/key-amb/my-perlenv cpanm --installdeps オプションで、cpanfile の記述を元にモジュ…

Perl CLI フレームワーク

Perlで使えるCLIフレームワークの個人的調査メモ。 インフラ運用などをやっていると、CLIをさくっと作りたいニーズが出てくる。 毎回一から書くより、既存のフレームワークに乗っかった方が楽なこともあるだろう。 というわけで、ちょっと調べてみた。 CPAN …

Minilla を使って CPAN にモジュールを上げてみた

https://github.com/key-amb/perl-Text-LTSV-Liner を CPAN に上げたときの作業メモ。 PAUSE ID 申請 CPAN にモジュールを上げるために必要。 社内でCPAN Authorになろうハッカソンを開催しました!! - 僕の車輪の再発明 を参考にした。 リクエストを送ると…

perl モジュールのファイルパスの調べ方

perldoc コマンド $ perldoc -l File::Path Class::Inspector を使う perl のコード上で調べたい場合はこちらを使うといい。 use Class::Inspector; my $module = 'File::Path'; print Class::Inspector->resolved_filename($module), "\n"; 参考 モジュール…

Perl Pod の文法

http://perldoc.perl.org/perlpod.html によくまとまっている。

Log::Log4perl のログレベル

FATAL, ERROR, WARN, INFO, DEBUG, TRACE の6つがある。 $logger オブジェクトを使うとそれぞれメソッドで書ける。 $logger->trace("..."); # Log a trace message $logger->debug("..."); # Log a debug message $logger->info("..."); # Log a info messag…

gdbperlの使い方

ちょっと固まったプロセスに strace してたら、「それgdbperl使った方がいいっすよ」って後輩に言われたので使ってみた。 gdbperlは https://github.com/ahiguti/gdbperl ここにある。 使い方は https://www.slideshare.net/akirahiguchi/gdbperl にある。 |…

Term::ANSIColorでテキストに色を付ける

前掲のText::LTSV::Linerでも、そもそもText::LTSVの中で使われているYAML::Tiny::Colorでも使われている Term::ANSIColor というモジュールを使うと、ターミナルに出力するテキストに色を付けることができる。http://perldoc.perl.org/Term/ANSIColor.html …

Text::LTSV::Liner 書いてみた。

LTSVのPerlのパーサをCPANで探していたら、Text::LTSVとApp::YGが見つかったけど、どちらも次のような感じで複数行に分けて表示してくれるものっぽかった。 $ cat sample.ltsv | ltsview -k id,name --- id:001 name:taro --- id:002 name:jiro --- :ログと…