For example, sub('/turtle|fish/i') and then in the sub, I would have:
sub {
# After validating that the regex is really a regex.
my $string = 'fish';
print "hello" if ($string =~ $_[0]); # prints hello
}
my $a = qr/turtle|fish/i;
foo($a);
sub foo{
my $reg = shift;
if(ref($reg) eq 'Regexp'){
my $string = 'fisH';
print "hello" if ($string =~ $reg);
}
}
'/turtle|fish/i' is a Perl expression, not a regular expression. turtle|fish and (?i-xsm:turtle|fish) are (Perl) regular expressions. Since '/turtle|fish/i' is Perl, you'd need eval to execute it. So you need to pass just the regular expression ((?i-xsm:turtle|fish)) or precompile it with [doc://perlop|qr//] (qr/turtle|fish/i).
For example,
$uncompiled_re = '(?i-xsm:turtle|fish)'; mysub($uncomiled_re); $compiled_re = qr/turtle|fish/i; mysub($comiled_re);
Strings get tricky when \ is used, but qr// doesn't. For example,
$uncompiled_re = "(?i-xsm:\\w)"; mysub($uncomiled_re); $compiled_re = qr/\w/i; mysub($comiled_re);
The documented usage is
$string =~ /$re/
whether $re contains a string or a compiled regexp, but I think
$string =~ $re
works in both cases.
The code, $string =~ $re ;, will work in both cases:
perlmonks.org content © perlmonks.org and Anonymous Monk, ikegami, ioannis, johnnywang
prlmnks.org © 2006 edmund von der burg (eccles & toad)
v 0.03