my $template_text = read_file('test.tmpl'); # get all expr attributes my @orig_exprs = ($template_text =~ /expr="[^"]*"/g); my @exprs = @orig_exprs; @exprs = map({s/\s+//g; s/^expr="//; s/"$//; s/not\((.*?)\)/!$1/g; $_} @exprs); @orig_exprs = map({s/[|&()]/\\$&/g; $_} @orig_exprs); # construct new tmpl_var/tmpl_if names in place of the expressions my @expr_names = @exprs; @expr_names = map({s/==/_is_/g; s/\{$&\}/g; $_} @exprs); # generate new template file my $tmpl_filename = '/tmp/test.tmpl'); write_file($tmpl_filename, $template_text); #### sub _fill_expr_params { my ($row, $expr_names, $exprs) = @_; $row->{$expr_names->[$_]} = eval($exprs->[$_]) for ( 0.. $#$exprs ); }