in reply to Re: Dynamic Regex?
in thread Dynamic Regex?

tachyon compares three methods of assigning regexes to a variable:
$pat = "m/foo/"; print "foo1\n" if "foo" =~ $pat; $pat = m/foo/; print "foo2\n" if "foo" =~ $pat; $pat = qr/foo/; print "foo3\n" if "foo" =~ m/$pat/;
Passing $pat into a sub is no problem using either of the second two methods above. The first does not work period as you will see if you run it.
The second does not work either. It is equivalent to:
$pat = ($_ =~ m/foo/); print "foo2\n" if "foo" =~ $pat;
$pat will be either 1 or the null string, depending on whether $_ matches /foo/. You will see this if you run it and actually examine the value of $pat.

Replies are listed 'Best First'.
Re: Re: Re: Dynamic Regex?
by tachyon (Chancellor) on May 21, 2001 at 05:06 UTC
    Dang, you are correct! I never write $foo =~ $pat so as the seeker of wisdom needed to be using this construct I *quickly* checked it to see if it worked using the code posted. As you rightly point out although this appeared to work in my quick test if I had also tested this: $pat = m/foo/; print "big snafu, egg on face, whoops\n" if "bar" =~ $pat; then my error would have stared me in the face! Thanks for pointing out the error, I hate to post wrong advice and usually run a quick test first. Ah well, another day at the monestry, another snippet of wisdom on the road to enlightenment. As a result the original code will need a qr/$pat/ to work. head bowed, duly chastened :-( tachyon PS this is what you need to get it to work. Trust me ;-) $pat = qr/some pattern here/; ... ... ... sub paramCheck # Returns "" if no error or description of problem(s). { ... my $pat = shift; ... ... if ( $val !~ m/$pat/ ) { $err .= wes( "$lbl contains invalid characters; " . "it can only hold $msg." ); } return $err; }