perl 2次元ハッシュのソート2 perl

動作確認できる環境を作る

とりあえず動作を確認できる環境を作る。
アプリディレクトリにPluginディレクトリを追加。

$ mkdir -p lib/Mojolicious/Plugin

libにパスが通っていれば、
app->pluginで普通に読み込まれるようになる。
プラグインのプログラムを書く

プラグインのプログラムは、以下の形式に従うようにする。

モジュールの名前を Mojolicious::Plugin::* にする
Mojolicious::Pluginを継承する
registerメソッドを定義する

以下の様なプログラムになる。
lib/Mojolicious/Plugin/Example.pm

package Mojolicious::Plugin::Example;
use Mojo::Base Mojolicious::Plugin ;

sub register {
my ($self $app $conf) = @_;

}

1;

registerメソッドに処理を書いていく。
helper機能でControllerに新しいメソッドを追加したり、
フック機能で入力や出力のフィルタ処理を追加したりする感じになる。
例: Controllerに新しいメソッドを追加する

helper機能を使うと、Controllerに新しいメソッドを追加することができる。
例えば、PHPのnl2brのようなメソッドを追加するプラグインは以下のようになる。
lib/Mojolicious/Plugin/Nl2br.pm

package Mojolicious::Plugin::Nl2br;
use Mojo::Base Mojolicious::Plugin ;

sub register {
my ($self $app $conf) = @_;

$app->helper( nl2br => sub {
my ($c $text) = @_;
&#36;text =~ s/(&yen;r&yen;n|&yen;n&yen;r|&yen;n|&yen;r)/<br&yen;/>&#36;1/g;
return &#36;text;
&#125;);
&#125;

1;

これを読み込むと、Controllerにnl2brメソッドが生える。
テンプレート内では、appでControllerにアクセスできるようになっているので、
app->nl2br(&#36;txt)という感じで使用することができるようになる。
myapp.pl

use Mojolicious::Lite;
use lib lib ;

plugin Nl2br ;

get / => sub &#123;
my &#36;self = shift;

&#36;self->stash->&#123;txt&#125; = テスト1&yen;nテスト2&yen;nテスト3&yen;n ;
# ここでも使える &#36;self->nl2br( テスト1&yen;nテスト2&yen;nテスト3&yen;n );

&#36;self->render();
&#125; => index ;

app->start;
__DATA__

@@ index.html.ep
<html>
<head>