[Perl6]HTMLエスケープはtransメソッドを使おう
HTMLやXMLの処理でよくある特殊文字「& < > ' "
」のエスケープをPerl 6でやってみましょう。
Perl 6の文字列には.trans
という便利なメソッドがあります。これは変換前→変換後のペアを受け取って文字の変換を行ってくれます。
my $trans-pair = ( '&', '<', '>', q{"}, q{'} ) => ( '&', '<', '>', '"', ''' ); sub encode-entities(Str $str) { return $str.trans($trans-pair); } my $encoded = encode-entities( q[a & b < c > d " e '] ); say $encoded; # 出力:a & b < c > d " e '
エスケープ済みの文字列を復元するのは簡単で、.trans
メソッドに渡すペアを逆にするだけです。ペアを逆にするには.antipair
メソッドを使います。
my $trans-pair = ( '&', '<', '>', q{"}, q{'} ) => ( '&', '<', '>', '"', ''' ); sub encode-entities(Str $str) { return $str.trans($trans-pair); } sub decode-entities(Str $str) { return $str.trans($trans-pair.antipair); # ペアを逆にして渡す } my $decoded = decode-entities( q[a & b < c > d " e '] ); say $decoded; # 出力:a & b < c > d " e '