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


in reply to strange usage of s/// [solved: Perl 5.14 and 5.16 bug]

$_="abcdef"; s/@{[s".."."gr]}/$& /; print;

This variation of yours does in fact work (prints "abc def"), and so do the following ones (which are closer to the original solution by "tails"):

s/@{[s".."."gr]}\K/ /;
s/@{[s".."."gr]}\K/$"/;

Thus I conclude that the original "solution" is the result of a typo (separator '/' put in the wrong place), and cannot work.

As for how the corrected variations listed above work, lets break it down:

1)

s".."."gr;

If the input string in $_ has an even number of characters (which seems to be implicitly assumed here), then this expression will return a string consisting of only dots, of half the length of the input string. E.g. for the input string "abcdef" it returns "...".

2)

@{[ ]}

This is a common trick to execute a piece of code, and insert the code's return value directly into a string without introducing a temporary variable. It works because Perl interpolates anything that looks like an array variable inside a string.

3)
The above two expressions combined, will effectively produce the following substitution command in case of the input string "abcdef" (for the three different variations listed above):

s/.../$& /;
s/...\K/ /;
s/...\K/$"/;

All of them do the same thing: Insert a space after the third character of the original string, i.e. right in the middle.
(If you're still confused, see perlreref for an explanation of \K and $&.)

------
why $" is different from literal space character in this regex?

It isn't, unless you've manually changed that variable.
Maybe the author just liked a little obfuscation, or wanted to make it more "generic".