These are how strings are stored when processed by a pattern.
# The part of the string that matches the pattern is automatically stored in $&
if ("Hello there, neighbor" =~ /\s(\w+),/) {
print "That actually matched '$&'.\n";
}
# In the above example, the part that matched was " there," (a space, a word, and a comma).
# In comparison, capture $1 would have just the five-letter word.
# Whereas, $& has the entire matched section.
# Whatever came before the matched section is stored in $`. (what the engine skipped over the find the match)
# Whatever came after is stored in $'. (the remainder of the string after the match)
# Note: the regular expression engine searches from left to right.
# In practise, these automatic match variables can cause some performance issues in larger programs, so most Perl programmers use workarounds.
# A good one if using v5.10 or later, is the /p modifier.