in reply to Best practice on escapes in interpolated strings
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 ;
|
|---|