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

I think I understand what you are trying to do although your question wasn't clear to me at the outset.

First, this /ee stuff is messy and I read this post StackOverflow re: variable in replacement side which talks about some of the details.
Then I came across: String::Substitution module.
I figured that this module does exactly what you want, so I installed and tested it.

use strict; use warnings; use String::Substitution qw(gsub_copy); my $in_string = 'foo.ra'; my $find_exp = '\.(.)(.)$'; my $replace_exp = 'b$2$1s'; my $output = gsub_copy($in_string, $find_exp, $replace_exp); print "$output\n"; # prints: foobars
You can read thru the docs and see more options.
  • Comment on Re: sprintf using variables for format and variables to do a search and replace, sprintf issues
  • Download Code

Replies are listed 'Best First'.
Re^2: sprintf using variables for format and variables to do a search and replace, sprintf issues
by kevins4perl (Initiate) on Mar 07, 2023 at 22:09 UTC

    Thanks for the reply. The sprintf was a bit interesting as I had to isolate the to do ${1} etc. as the variables were sometimes followed by a number say $145 and I really needed the $1 ... I will look over the gsub_copy as it might be better as my "solution" is limited to 9 matches currently, which should me more than enough for the purpose of this script, which should need no more than 2. This is what I ended up with last night:

    sub stringExpressionReplace { my $mod_string = $_[0]; my $find = $_[1]; my $replace = $_[2]; my $orig_string = $mod_string; my $mod_replace = sprintf("\"%s\"",$replace); $mod_replace =~ s/\$(\d)/\${$1}/g; $mod_string =~ s/$find/$mod_replace/ee; print " stringExpressionReplace String: $orig_string + --> $mod_string\n" if($orig_string ne $mod_string); return $mod_string; }