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 :-)

--
<http://dave.org.uk>

"The first rule of Perl club is you do not talk about Perl club."
-- Chip Salzenberg