#!/usr/bin/perl use strict; use warnings; $SIG{__WARN__} = sub { die $@ }; for my $row ( { a => 1, b => 2, c => 3, d => 4 }, { a => 0, b => 2, c => 3, d => 4 }, { a => 0, b => 2, c => 2, d => 4 }, { a => 0, b => 2, c => 2, d => 3 }, ) { use Data::Dump 'dd'; dd 'row', $row; for my $test ( qw( a>0 a>1 a>2 a>3 d<=3 c>2&d>2 ) ) { use Data::Dump 'dd'; dd { $test => evaluateRow($test, $row) }; } print "\n"; } sub evaluateRow { my ($test, $row) = @_; return eval( $test =~ s(\b[a-z]+\b)( $row->{$&} // '')gier ) ? 1 : 0; }