I think the poster didn't want so much the final two characters (which could be got by substr($_, -2)
anyway) as non-space characters after a period. Of course, your regex could easily be adapted to /\.(\S+)$/
; but I think the sexeger /^(\S+)\./
should be quicker on some inputs (in the sense that it doesn't have to back-track on pathological strings like '............... .a'
UPDATE: My sexeger can behave badly on strings with multiple periods in them. Two natural changes are to make the \S+ match non-greedy, or to change \S to [^.]. These have different matching behaviour, especially on strings with characters that are neither spaces nor 'word' characters, and on strings with multiple periods; but one of them might do what the poster wants.
Also, I changed the sample string to one that actually matches.
UPDATE 2: Oops, on re-reading, the poster explicitly wants to allow strings without any periods at all. Never mind.