in reply to how to get the String as regularexpression
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
|
|---|