in reply to scalar grep not binding hash slots

The rules and rules2 lines are part of the list input to the first grep. Try: (driver => grep { $p{rdbms} eq $_ } Alzabo::Driver->available),