Code-wise, the third option is the easiest to implement, at least if you pre-initialize your key-hash with a default:
my %values= ( '^' => '^', ); ... s!\^\(([^)]+)\)!$values{ $1 }!g;
Due to the selection of a default key of ^ with value ^, ^(^) gets replaced by ^ without any change to your code.
Of course, this approach isn't immediately applicable to your situation because you seem to want to dispatch method calls. A really nasty approach here would be to implement a ^ method in your object that returns the value ^, but that brings us deep into obfuscated territory, and the superficial simplicity of the code will certainly mystify the casual onlooker:
package My::Document; *{"My::Document::^"}= sub { "^" }; sub name { $_[0]->{name} }; sub fill_template { my( $self, $template )= @_; $template=~ s!\^\(([^)]+)\)!$self->$1()!ge; $template }; package main; my $t= bless { name => 'wanna_code_perl', } => My::Document; print $t->fill_template(<<TMPL); Hello ^(name). Escaped: ^(^). TMPL ;
In reply to Re: Best practice on escapes in interpolated strings
by Corion
in thread Best practice on escapes in interpolated strings
by wanna_code_perl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |