use strict; use warnings; # EX: Change '.' 'char1' 'char2' to 'b' 'char2' 'char1' 's' my $input_string = 'foo.ra'; my $find = '\.(.)(.)$'; my $replace = 'b$2$1s'; my $def_value0 = stringExpressionReplace($input_string,$find,$replace,0); my $def_value1 = stringExpressionReplace($input_string,$find,$replace,1); my $def_value2 = stringExpressionReplace($input_string,$find,$replace,2); # Use varaible-based substitutions in search/replace pattern sub stringExpressionReplace { my $mod_string = $_[0]; my $find = $_[1]; my $replace = $_[2]; my $sr_type = $_[3]; print "\nstringExpressionReplace String: $mod_string Find: $find Replace: $replace\n"; my $orig_string = $mod_string; my $orig_replace = $replace; $replace = "\"" . $replace . "\""; if($sr_type == 1) { # Reorder issue #$mod_string =~ s/$find/sprintf($replace,$1,$2,$3,$4,$5)/e; # Example, ordering issue print "stringExpressionReplace sr_type = 1 Replace var with substitution hard-coded.\n"; $mod_string =~ s/$find/sprintf($replace,$2,$1)/e; # Hard-coded order, var list not a string print "stringExpressionReplace SR command: s/$find/sprintf($replace,\$2,\$1)/e\n"; print "stringExpressionReplace String: $orig_string --> $mod_string Find: $find Replace: $replace\n" if($orig_string ne $mod_string); } elsif($sr_type == 2) { my @replacements = ( $replace =~ /(\$\d)/g ); # Store Replacement list in order my $replace_count = scalar @replacements; $replace =~ s/\$\d/\%s/g; print "stringExpressionReplace Format String: $orig_replace --> $replace\n"; my $var_list = ""; if(@replacements) { foreach my $var (@replacements) { $var_list .= "$var,"; } $var_list =~ s/,$//; print "stringExpressionReplace Var String: $var_list\n"; } if(@replacements) { # perl expression $-based subsitution found print "stringExpressionReplace sr_type = 2 Replace and var lists as variables.\n"; print "stringExpressionReplace SR command: s/$find/sprintf($replace,$var_list)/e\n"; $mod_string =~ s/$find/sprintf($replace,$var_list)/e; #$mod_string =~ s/\.(.)(.)$/sprintf("b%s%ss",$2,$1)/e; print "stringExpressionReplace String: $orig_string --> $mod_string Count $replace_count Find: $find Replace: $orig_replace --> $replace $var_list\n"; } else { $mod_string =~ s/$find/$replace/; print "stringExpressionReplace String: $orig_string --> $mod_string\n" if($orig_string ne $mod_string); } } else { print "stringExpressionReplace completely hard-coded.\n"; $mod_string =~ s/\.(.)(.)$/b$2$1s/; print "stringExpressionReplace sr_type = 0 String: $orig_string --> $mod_string\n" if($orig_string ne $mod_string); } return $mod_string; }