Javascript の RND を Perlで書いてみました

amix.dk : RND - fast and simple JS template system
Javascript で書いたシンプルなテンプレート RND を Perl で書いてみました。簡易モディファイアが使えるのに、とってもシンプルです。繰り返しや条件付きがいらないなら、これで十分な気がします。

#!/usr/bin/perl
use strict;
use warnings;

sub RND {
    my($tmpl, $ns) = @_;
    $tmpl =~ s{\%\(([\w|]*)\)}{
        my @F = split /\|/, $1;       # %(key|modifier1|modifier2|...) を拾う
        my $t = $ns->{shift @F};      # key でハッシュから値を取り出す
        $t = eval qq{$_($t)} for @F;  # モディファイアを順に通す
        $t || $&;
    }ge;
    $tmpl;
}

sub roman { [qw(0 i ii iii iv v vi vii viii ix x)]->[shift] } # 手作りモディファイア

# %(link) は $ns->{link}
# %(value|int|roman) は roman(int($ns->{value}))
# にそれぞれ置き換える
my $tmpl = '<a href="%(link)">%(value|int|roman)</a>';
my $ns = {'link' => 'http://amix.dk', 'value' => 5.5};
print RND($tmpl, $ns), "\n"; # <a href="http://amix.dk">v</a>