The Match Operator in Perl


The match operator m// in Perl, is used to match a string or statement to a regular expression. For example, to match the character sequence "foo" against the scalar $bar, you might use a statement like this −

Example

 Live Demo

#!/usr/bin/perl
$bar = "This is foo and again foo";
if ($bar =~ /foo/) {
   print "First time is matching\n";
   } else {
   print "First time is not matching\n";
}
$bar = "foo";
if ($bar =~ /foo/) {
   print "Second time is matching\n";
   } else {
   print "Second time is not matching\n";
}

When above program is executed, it produces the following result −

First time is matching
Second time is matching

The m// actually works in the same fashion as the q// operator series.you can use any combination of naturally matching characters to act as delimiters for the expression. For example, m{}, m(), and m>< are all valid. So above example can be re-written as follows −

#!/usr/bin/perl
$bar = "This is foo and again foo";
if ($bar =~ m[foo]) {
   print "First time is matching\n";
   } else {
   print "First time is not matching\n";
}
$bar = "foo";
if ($bar =~ m{foo}) {
   print "Second time is matching\n";
   } else {
   print "Second time is not matching\n";
}

You can omit m from m// if the delimiters are forward slashes, but for all other delimiters you must use the m prefix.

Note that the entire match expression, that is the expression on the left of =~ or !~ and the match operator, returns true (in a scalar context) if the expression matches. Therefore the statement −

$true = ($foo =~ m/foo/);

will set $true to 1 if $foo matches the regex, or 0 if the match fails. In a list context, the match returns the contents of any grouped expressions. For example, when extracting the hours, minutes, and seconds from a time string, we can use −

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Match Operator Modifiers in Perl

The Perl match operator supports its own set of modifiers. The /g modifier allows for global matching. The /i modifier will make the match case insensitive. Here is the complete list of modifiers

Sr.NoModifier & Description
1i
Makes the match case insensitive.
2m
Specifies that if the string has newline or carriage return characters, the ^ and $ operators will now match against a newline boundary, instead of a string boundary.
3o
Evaluates the expression only once.
4s
Allows use of . to match a newline character.
5x
Allows you to use white space in the expression for clarity.
6g
Globally finds all matches.
7cg
Stops if file already exists

Updated on: 29-Nov-2019

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements