HTMLタグのエスケープは文字クラスとhashでやる
404 Blog Not Found:perl - 勝手に添削 - 40行で作るPerl用テンプレートエンジン
2つ勉強になった。HTMLタグのエスケープとreturn
例えば、これを以下のように書いてしまった場合、どうなるだろうか。
sub convert { return unless defined(my $str = shift); $str =~ s{<}{<}gso; $str =~ s{>}{>}gso; $str =~ s{\"}{"}gso; $str =~ s{&}{&}gso; $str; }この場合、先に>となったものが、>となるリスクが避けられない。
こういう場合は、文字クラスとhashのコンボで攻めるのが正しい。
my %escaped = ( '&' => 'amp', '<' => 'lt', '>' => 'gt', '"' => 'quot' ); sub escape { my $str = shift or return; $str =~ s{([&<>"])(?!amp;)}{'&' . $escaped{$1} . ';'}msxgeo; $str; }
これは前者でやってた。気を付けよう。
あと、関数で「or return」って書き方ができるのね。
これも勉強になった。