Jason Dusek wrote:
>
> Hi List,
Hello,
> Let's say I want to know if anything in @ARGV has one of a certain list
> of suffixes in it. So I write:
>
> foreach (@ARGV) {
> print if (/\.(fish|foul)$/);
> }
>
> But if I have a long list of suffixes, then I would like to store the
> suffixes in an array, and then evaluate the array in my regular
> expression. What does this? I've tried:
>
> @SUFF = (fish,foul);
> foreach (@ARGV) {
> print if (/\.(@SUFFIXES)$/);
> }
>
> and also:
>
> @SUFF = (fish,foul);
> foreach (@ARGV) {
> print if (/\.(@[EMAIL PROTECTED])$/);
> }
>
> but I can't get it to work.
To make sure that it works correctly you have to join each suffix with a
'|' character between them and ensure that any special regular
expression characters are escaped. Also, using qr// to pre-compile the
regexp may help.
my @SUFF = qw( fish foul );
my $match = join '|', map "\Q$_", @SUFF;
foreach ( @ARGV ) {
print if /\.(?:$match)$/;
}
Or better:
my @SUFF = qw( fish foul );
my $match = qr/\.(?:@{[ join '|', map "\Q$_", @SUFF ]})$/;
foreach ( @ARGV ) {
print if /$match/;
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>