詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Router::Simple::Reversible という Perl モジュールを書いた

https://metacpan.org/pod/Router::Simple::Reversible

だいぶ昔に書いていたのを shipit しました。tokuhirom さんの Router::Simple に、いわゆるリバースルーティングを足しただけのモジュール。Router::Simple を継承しているので、bless しなおすなりして使えばよいかと思います。

新しく生えるメソッド $router->path_for$router->match で返ってくるような hashref を渡すと、いい感じにルーティングのルールが具体化されたかたちで文字列が返ってくるシンプルな API です。テスト を見るとだいたい使い方がわかります:

my $router = Router::Simple::Reversible->new;

# from Router::Simple's pod
$router->connect('/', {controller => 'Root', action => 'show'});
$router->connect('/blog/{year}/{month}', {controller => 'Blog', action => 'monthly'});
$router->connect('/wiki/:page', { controller => 'WikiPage', action => 'show' } );
$router->connect('/download/*.*', { controller => 'Download', action => 'file' } );

is $router->path_for({ controller => 'Root', action => 'show' }),
   '/';

is $router->path_for({ controller => 'Blog', action => 'monthly' }, { year => 2015, month => 10 }),
   '/blog/2015/10';

is $router->path_for({ controller => 'WikiPage', action => 'show' }, { page => 'HelloWorld' }),
   '/wiki/HelloWorld';

is $router->path_for({ controller => 'Download', action => 'file' }, { splat => [ 'path/to/file', 'xml' ] }),
   '/download/path/to/file.xml';

is $router->path_for({ controller => 'NoSuchController', action => 'show' }),
   undef;

何か変なところがあったら GitHub リポジトリ のほうまでお知らせください。

Shipped ARGV::JSON 0.01

English entry is here.

ARGV::JSON というモジュールをリリースいたしました。Perl では <> という特殊な演算子で、プログラム引数として与えられたファイルやら標準入力やらをよしなに読み込むことができます(デフォルトだと行ごと)が、この ARGV::JSON を use しておくと、<> から 1 行読み込む代わりに、パースされた JSON データが返ってくるようになります。

実例を見ると明らかでしょう:

% curl -s https://api.github.com/users/motemen | perl -MARGV::JSON -E 'say <>->{blog}'
http://motemen.github.io/

jq のようなことが Perl でもできますね!

perlワンライナーで便利な -n-p といったオプションも <> を利用しているので、$_ を使った形のコードにすることもできます:

% curl -s https://api.github.com/users/motemen | perl -MARGV::JSON -nE 'say $_->{blog}'
http://motemen.github.io/

ちなみに複数の JSON が与えられた場合はそれを順番に読んでいくようになってます。どうぞご利用ください。

ARGV::JSON - easy JSON handling in one-liners #perl

To manipulate JSON data with perl-oneliner I have been writing like this:

% perl -MJSON -0 -E 'say decode_json(<>)->{foo}' data.json

... which tires my fingers. Recently I found ARGV::URL, which may be useful for one-liners, so I wrote the JSON-version of this module, ARGV::JSON.

With this module you can simply use <> to access the data structure that the JSON represents.

% perl -MARGV::JSON -E 'say <>->{foo}' data.json

Each <> (readline) call returns a hashref or something. Like jq with Perl, pretty simple.

Multiple JSONs are returned in order:

% echo '{"x":1}{"x":2}{"x":3}' | perl -MARGV::JSON -n -E 'say $_->{x}'
1
2
3

Now available at GitHub: https://github.com/motemen/perl5-ARGV-JSON