Chapter 1. Syntax

1.7. Regular expressions

m// (the match operator)

print "hello" if $string =~ m/cowboys/;
print "hello" if $string =~  /cowboys/;  # same but shorter
print "hello" if $string =~  /cowboys/i; # same but case insensitive

Useful tricks to avoid escaping tons of stuff inside regexps:

print "hello" if $string =~ m|https://|; 
print "hello" if $string =~ m{https://}; 
print "hello" if $string =~ m'https://'; 
# etc

# also:
print "hello" if $string =~ qq{https://}; 

s/// (the substitution operator)

my $string = "cowboys and aliens";
$string =~ s/cowboys/martians/;
print $string; 
# prints "martians and aliens"

Global substitution

my $string = "pony pony goose";
$string =~ s/pony/duck/g;
print $string; 
# prints "duck duck goose"

The same tricks for case insensitive matches and avoiding escaping stuff in regexps apply to s/// as well.

qr// (re-using regexps)

my $xls_regexp = qr/\.xls$/i;

for my $filename ( filesnames() ) {
    print "hello" if $filename =~ $xls_regexp;
}

Commenting regexps with the /x modifier

Its useful to comment long complicated regular expressions for clarity. For example, this:

$code =~ s|/\*.*?\*/||gs;

is equivalent to this:

  # Delete C comments
  $code =~ s|
      /\*     # Match the opening delimiter
      .*?     # Match a minimal number of characters
      \*/     # Match the closing delimiter
  ||gsx;

For more info

Check out the offical perl docs for more details on Perl regular expressions: