'/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 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.
In reply to Re: Passing regular expressions as arguments to subroutines
by ikegami
in thread Passing regular expressions as arguments to subroutines
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |