The posted code is building a string, and hence since a non-empty string tests true, your code will always output. Since you want to join your regular expressions with an 'and', the simplest implementation (IMHO) would be using Perl to handle the conditional logic. What you've written so far would be most naturally converted to an
eval, but it seems more logical to simply use the
qr// delimiter (see
Regexp Quote Like Operators in
perlop) to stash them all in an array, and then track test success with a flag, perhaps like:
#!/usr/bin/perl
use strict;
use warnings;
# build regular expression from command line args
my @res;
foreach my $arg (@ARGV) {
push @res, qr/$arg/;
}
while (<STDIN>){
my $fail = 0;
foreach my $re (@res) {
$fail ||= $_ !~ $re;
}
print unless $fail;
}