That's a respectable attempt you've made. Like you said, the problem is that you're only swapping the first and the second word. You should also try to match the stuff between two words, and suddenly it's not longer impossible to match the first and the last word.

If you try

s/(\w+)(.*)(\w+)/$3$2$1/
you'll see that you'll have some trouble with greediness of the middle match: the "last word" will match too little: I expect it to match just the last letter.
s/(\w+)(.*?)(\w+)/$3$2$1/
is the other extreme, and you'll match too little.

I can think of two solutions:

  1. Use the (latter) non-greedy match, but anchor that far side to the end of the string:
    s/(\w+)(.*?)(\w+)$/$3$2$1/
    or
    s/(\w+)(.*?)(\w+)(\W*)$/$3$2$1$4/
  2. Require there's a word boundary just in front of the last match, and match greedily.
    s/(\w+)(.*)\b(\w+)$/$3$2$1/
All untested, but I have faith. :)

In reply to Re^3: How do I reverse the order of the first and last word of a string? by bart
in thread How do I reverse the order of the first and last word of a string? by ferrispike12

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.