Firstly, please cut and paste your code into your questions here, don't try to retype them as that can create bugs. I assume you retyped your code here as:
$exten=|\.txt|\.doc|\.xml
doesn't even compile.
Let's assume that you actually have:
$exten = '|\.txt|\.doc|\.xml';
Then the problem is not with the interpolation of the string in the match operator (as you think), it's actually a problem with your regular expression. See the following (which is based on your code):
my $exten = '|\.txt|\.doc|\.xml'; for (qw(foo.txt foo.csv foo.xml)) { print "$_: "; print /$exten/ ? "match" : "no match"; print "\n"; }
This gives the following output:
foo.txt: match foo.csv: match foo.xml: match
See that everything matches, even foo.csv which looks like it shouldn't match.
Now compare with this:
my $exten = '\.txt|\.doc|\.xml'; for (qw(foo.txt foo.csv foo.xml)) { print "$_: "; print /$exten/ ? "match" : "no match"; print "\n"; }
Which gives this output:
foo.txt: match foo.csv: no match foo.xml: match
The difference is that the first version has a '|' at the start of the regex. And that means that the alternatives will included the empty string. And everything matches the empty string.
So, to summarise, there's nothing wrong with using a variable as a regular expression as you have done, but you need to get the regex right :-)
"The first rule of Perl club is you do not talk about
Perl club."
-- Chip Salzenberg
In reply to Re: how to get the String as regularexpression
by davorg
in thread how to get the String as regularexpression
by arunmep
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |