古い記事
ランダムジャンプ
新しい記事
文字列置き換えされたいくない領域をどうやって守るか。一時的に退避さ
せ、後で復帰させるってのをやってみた。でも、なんだかすっきりしない
なあ。しょうがないのかな。

### 文字列置き換えから一時的に退避し、後に復帰する
my $num_of_escaped_string;
my %escaped_string;
sub escape_string {
    my ($strp) = @_;
    my $btag = '\t_HTML_START_\n'; # 開始マーク
    my $atag = '\t_HTML_END_\n'; # 終了マーク
    $num_of_escaped_string = 0;
    $$strp =~ s!$btag(.*?)$atag!
        $escaped_string{++$num_of_escaped_string} = $1,
        sprintf("\x5\x13%d\x3", $num_of_escaped_string)!gsmxe;
}
sub unescape_string {
    my ($strp) = @_;
    $$strp =~ s|\x5\x13(\d+)\x3|$escaped_string{$1}|g;
}
使い方と対象テキストの例:
エスケープされてない領域の「<」は「&lt;」になる。

escape_string(\$str);
$str =~ s|<|&lt;|g;
unescape_string(\$str);
「<a href="hohoho">hehehe</a>」と書くと以下のようになります。
  > hehehe >
chalow で採用予定です。あまり使わないとは思いますが、HTML や
JavaScript の説明などのメタなことを書くときにでも。
この記事に言及しているこのブログ内の記事