The first problem I spotted is that you're using [ and ] as you build the regexp, and putting alternation inside the square brackets. That doesn't work. In fact, all it really means is to accept any character in @list, plus accept the | character. Alternation is meaningless inside character classes.
For that section, you really want, "my $regex = join '|', @list;" (in other words, forget about the character class, unless of course you really do want a character class, in which case you'll forget about alternation).
You might also want to use the qr// operator. If you do it that way, here's a snippet for you to work with:
use strict; my( @list ) = <DATA>; chomp @list; my $buildup = join '|', @list; my $regexp = qr/$buildup/; my $s = huey'; print "match:\t$s\n" if $s =~ $regexp; __DATA__ huey dewey louie
Dave
In reply to Re: creating a regular expression's alternation dynamically?
by davido
in thread creating a regular expression's alternation dynamically?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |