http://qs321.pair.com?node_id=414747


in reply to changing a portion of a line leaving its formatting intact

Why would this be a problem?

You can replace $f[4] with with int($f[4]) . " " x (length $f[4] - length int($f[4]));

Or you could use a regex instead of split...

Regex you could use:

Compact form:
s/(\d+(?:\.\d+)?)(?=(?:\s+\S+){4}$)/int ($1) . " " x (length($1) - length(int($1)))/eg;

Long way:

s/ ( # Capture group $1 \d+ # Digits (?: # Group (no capturing) (optional group) \. # a dot \d+ # Digits )? ) # End capture $1 (?= # Open look-ahead (?: # Group (no capturing) \s+ # Whitespace \S+ # Non-whitespace ) {4} # Match previous group exactly four times $ # Match end of line ) /int ($1) . " " x (length($1) - length(int($1)))/egx;

Note: small version tested, big version untested

Update: forgot length, added a possible regex