#!/usr/bin/perl -l use warnings; use strict; my $records = [ { 'services' => [], 'zone_record_id' => '1', }, { 'services' => [ { 'status' => 'OK', 'id' => '0', 'class' => 'Primary' } ], 'zone_record_id' => '2', }, { 'services' => [ { 'status' => 'OK', 'id' => '1', 'class' => 'Editable' } ], 'zone_record_id' => '4', }, { 'services' => [ { 'status' => 'OK', 'id' => '1', 'class' => 'Secondary' } ], 'zone_record_id' => '5', }, ]; my $lbr = "\n=============\n"; foreach my $record (@$records) { my $editor; print $lbr, "Record: $record->{'zone_record_id'}"; # Conditional array defined check first $editor = (@{$record->{'services'}})? 'service_edit' : 'plain_edit'; # <--- $editor = "no editor" if $record->{'services'}[0]{'class'} eq 'Primary'; $editor = "no editor" if $record->{'services'}[0]{'class'} eq 'Secondary'; # place here for 'Try to define all 'no editor' situations first print $editor; } #### Conditionaly check for defined array first: ============= Record: 1 plain_edit ============= Record: 2 no editor ============= Record: 4 service_edit ============= Record: 5 no editor Try to define all 'no editor' situations first: ============= Record: 1 service_edit ============= Record: 2 service_edit ============= Record: 4 service_edit ============= Record: 5 service_edit