Most of your questions seem to stem from an expectation that
split works by finding a string literal you pass it. While this expectation is correct for cases like
split 'x', 'axbxc';, split actually works based upon
regular expressions. Regular expressions use several metacharacters, one of which is
. - it a wildcard. You may gain some illumination by testing your expressions in code similar to:
print join "_|_", split /./, $foo;
To answer more on point for your questions:
- As previously stated, . is a regular expression metacharacter. To split on literal periods, use the regular expression /\./ or use the \Q \E combo (e.g. split /\Q.\E/, $foo;) to handle your escaping for you - see Quote and Quote like Operators.
- Double quotes are interpolated by Perl and single quotes are not - again, see Quote and Quote like Operators. In your case, double quotes apply escaping to backslashed characters. This means "\\." is equivalent to '\.' and "\." is equivalent to '.'. In particular, backslash is an ordinary character in single quotes unless followed by another backslash or by a single quote.
- In the last example, the regular expression engine is looking for a literal backslash followed by any character.
If any of this is unclear, I would be happy to expound further.