in reply to sprintf using variables for format and variables to do a search and replace, sprintf issues

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.

  • Comment on Re: sprintf using variables for format and variables to do a search and replace, sprintf issues
  • Select or Download Code