If I correctly understand the question, you don't need sprintf for this at all, but in the substitution you need a double eval, and a corresponding double layer of quoting:
% cat t0 use strict; use warnings; my $input = 'foo.ra'; my $find = '\.(.)(.)$'; my $replace = 'b$2$1s'; printf qq{result "%s"\n}, replace($input, $find, $replace); exit 0; sub replace { my($input, $find, $replace) = @_; $input =~ s{$find}{qq{"$replace"}}ee or die "input did not match"; return $input } % perl t0 result "foobars" %
The first eval creates the string "b$2$1s", the second eval then works out that that should be "bars".
At a brief glance your (type 2) sprintf solution could probably also be made to work, but would also need a double eval and will get rather complicated. So I would not recommend pursuing that approach further other than as a learning experience.
In reply to Re: sprintf using variables for format and variables to do a search and replace, sprintf issues
by hv
in thread sprintf using variables for format and variables to do a search and replace, sprintf issues
by kevins4perl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |