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


in reply to List manipulation headache

Depending on your input data, this should be pretty easy to do with a regex.
For instance, if your input file looks exactly like your snippet above, you could probably get away with just putting these two lines in a while loop:
s/ wap/, /g; s/, / wap/; # change back the first occurrence on each line

Replies are listed 'Best First'.
Re^2: List manipulation headache
by atancasis (Sexton) on Feb 13, 2011 at 15:30 UTC
    Interesting! Smart solution. Building on the excellent proposal by @elef, the expression can be further compressed to the following:
    s/ wap([2-9])/,$1/g
      There are a couple of ways in which that could break.
      It will break on lines where the first "wap" is not wap1 (we don't know if that can occur in the file) and it will break on wap11 through wap19, which seem to be valid data (OP: the rest can be abbreviated to 2,3,4,5,12,34).
      I seem to remember some regex element that tells perl to do a replacement on the nth occurrence(s) only, which could be used here, but I can't think of it now. Maybe I just made it up.