On Feb 25, 2014, at 2:30 PM, Bill McCormick wrote: > What would be the perl'ish way using map or some other sugar to check if a > list of values meet some criteria? Instead of doing something like > > my @issues = qq(123,456,a45); > my $max = 999; > > for (@issues) { > die if $_ < 0 or $_ > $max; > } > > I want to check if each list item is numeric and > 0 but less than $max. > > Cheers!
grep is the Perl function for testing a list of values against some criteria. perldoc -f grep 'grep BLOCK LIST' will return all of the items in LIST that result in a true value when BLOCK is evaluated. In scalar context, grep returns the number of items that evaluated to true, so you can either save all of the true-ish items or just get a count. For example (untested): my @fail = grep { $_ =~ /\D/ || $_ <= 0 || $_ >= $max } @issues; Now @fail contains any member of @issues that fails any of the three tests: 1) contains a non-digit, 2) is less than or equal to zero, 3) greater than or equal to $max If @fail is empty, everybody passed (that is, evaluated to false!) -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/