The Binding Operator, =~
Matching against $_ is merely
the default; the binding operator, =~, tells Perl to match the pattern on the
right against the string on the left, instead of matching against
$_.[†] For example:
my $some_other = "I dream of betty rubble.";
if ($some_other =~ /\brub/) {
print "Aye, there's the rub.\n";
}The first time you see it, the binding operator looks like some
kind of assignment operator. But it’s no such thing! It is simply
saying, “This pattern match, which would attach to $_ by default—make it work with this string on
the left instead.” If there’s no binding operator, the expression is
using $_ by default.
In the (somewhat unusual) example that follows, $likes_perl is set to a Boolean value
according to what the user typed at the prompt. This is a little on the
quick-and-dirty side because the line of input itself is discarded. This
code reads the line of input, tests that string against the pattern,
then discards the line of input.[*] It doesn’t use or change $_ at all.
print "Do you like Perl? ";
my $likes_perl = (<STDIN> =~ /\byes\b/i);
... # Time passes...
if ($likes_perl) {
print "You said earlier that you like Perl, so...\n";
...
}Because the binding operator has fairly high precedence, the parentheses around the pattern-test expression aren’t required, so the following line does the same thing as the one above—it stores the result of the test (and not the line of input) into the variable:
my $likes_perl = <STDIN> =~ /\byes\b/i;
[†] The binding operator ...