2014年7月6日日曜日

perlのAmon2でリクエストパラメータをすべて取得する

またperlです。
今度はAmon2っていうやつを使うことになったのですが、
画面に入力されたすべてのリクエストパラメータを1個ずつ指定せずに取りたかったので調べました。

入力フィールドはこんな感じ。



















取得の仕方はこれで取れます。
my @params2 = $c->req->param;

ただ、そのまま使おうとすると、先頭の値だけだったり配列としてしか取れないようです。
$c->log->info(@params2); # -> rate_2_3_0
$c->log->info(\@params2); # -> ARRAY(0x2708608)

ループでまわすとすべてのnameが取れました。
nameさえ取れればvalueも取れるのでやれそうです。
foreach my $var(@params2){
 $c->log->info($var);
}

結果
rate_2_3_0
rate_3_2_2
rate_3_1_0
rate_3_2_0
rate_3_3_3
rate_1_1_1
rate_2_1_0
rate_2_3_3
rate_2_2_0
rate_2_1_1
rate_1_1_0
rate_1_3_0
rate_3_3_0
rate_2_2_2
rate_3_1_1
rate_1_3_3
rate_1_2_0
rate_1_2_2
XSRF-TOKEN


参考URL
http://search.cpan.org/~miyagawa/Plack-1.0030/lib/Plack/Request.pm
http://www.perlplus.jp/perl/array/index11.html

2014年7月1日火曜日

perlをplenvで入れて、cpanmでモジュール入れてみた

前回前々回とperlのモジュールをcpanで入れてきました。
最近はrbenvのようにplenvというものでバージョンの管理とかやるそうです。
なので、plenvでcpanm使ってモジュールを入れてみました。

まずはchefのレシピを探してみたところ、あっさりと見つかりました。
https://github.com/kentaro/chef-plenv

まずはplenvとcpanmを入れました。
plenv_install "5.16.3" do
  user   "user"
  action :install
end
 
plenv_global "5.16.3" do
  user   "user"
  action :run
end
 
%w[
  Carton
].each do |mod|
  plenv_cpanm mod do
    user    "user"
    version "5.16.3"
    options "--force"
    action  :install
  end
end

続いてcpanfileに必要なモジュールを記述して、以下を実行します。
$ plenv exec carton install --deployment

モジュールを入れてみたので早速実行してみます。
$ perl test.pl
Can't locate Net/Hadoop/WebHDFS.pm in @INC (@INC contains: /home/user/app/lib/perl/Sample/../../../lib/perl /home/user/app/lib/perl /home/user/.plenv/versions/5.16.3/lib/perl5/site_perl/5.16.3/x86_64-linux /home/user/.plenv/versions/5.16.3/lib/perl5/site_perl/5.16.3 /home/user/.plenv/versions/5.16.3/lib/perl5/5.16.3/x86_64-linux /home/user/.plenv/versions/5.16.3/lib/perl5/5.16.3 .) at /home/user/app/lib/perl/Sample/WebHDFS.pm line 11.
BEGIN failed--compilation aborted at /home/user/app/lib/perl/Sample/WebHDFS.pm line 11.
Compilation failed in require at test.pl line 2.
BEGIN failed--compilation aborted at test.pl line 2.

どうやらcpanmで入れたモジュールが読み込めてないようです。
実行方法を調べてみたところ、以下のように実行すればよいようです。
$ carton exec perl test.pl


参考URL
https://github.com/kentaro/chef-plenv
http://gihyo.jp/dev/serial/01/perl-hackers-hub/002103
http://blog.papix.net/entry/2013/06/04/081554
http://tech-mr-myself.hatenablog.com/entry/2013/05/29/175716