Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does smartmatch return false when I match against a regex containing slashes?

I'm trying to match a simple string against a regular expression pattern using the smartmatch operator:

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use open qw(:std :utf8);

my $name = qr{/(\w+)/};
my $line = 'string';

print "ok\n" if $line ~~ /$name/;

I expect this to print "ok", but it doesn't. Why not?

like image 456
abra Avatar asked May 05 '11 18:05

abra


1 Answers

Remove the slashes from your regex:

my $name = qr{(\w+)};

Since you're wrapping the regular expression in qr{}, everything inside the braces is being interpreted as the regular expression. Therefore, if you were to expand out your search, it'd be:

print "ok\n" if $line ~~ /\/(\w+)\//;

Since your string doesn't start or end with slashes (or have any substrings that do), then the match fails, and you don't print ok.

like image 155
CanSpice Avatar answered Oct 16 '22 16:10

CanSpice