in reply to Array skips number if checked for defined.

Alternatively, if you change your check function to:

sub check_THING { my $id = shift; return 0 unless defined $THING[$id]; defined $THING[$id]{check} ? return 1 : return 0; }

you get:

Some Thing No Thing Some Thing No Thing