http://www.perlmonks.org?node_id=982210

Neighbour has asked for the wisdom of the Perl Monks concerning the following question:

I'm looking for a way to trim specific characters from the beginning of a substring at a specified location,length, and add (and this is the hard part) an amount of <padding character>s equal to the trimmed length to the end of the substring in order to keep the entire string (which is part of a fixed-length datastream) intact.
If the trimmed character is the same as the padding character, this bit of code does the trick:
perl -pi -e 'substr($_,589,35) =~ s/(\s*)(\w+)*/$2$1/ if /^(.{589})(\s +{1,34})/' file.txt
However, when the padding character is different from the trimmed character, $1 won't suffice :).
I've tried
perl -pi -e 'substr($_,589,35) =~ s/(0*)(\w+)*/$2($?{ ' ' x length($1) + })/ if /^(.{589})(0{1,34})/' file.txt
but that doesn't seem to work (maybe because $? is only allowed in the "matching"-part of a regex?
Any help is welcome :)

Edit: Using ''s inside a ''-command isn't useful, replacing them with ""s made it go, but not quite right.
perl -pi -e 'substr($_,589,35) =~ s/(0*)(\w+)*/$2($?{ " " x length($1) + })/ if /^(.{589})(0{1,34})/' file.txt
The 00 that gets trimmed gets replaced by ()with this code.