map liefert immer etwas zurück, ggfs. auch undef, das heisst, i.d.R.
ist die zurückgebene Liste von map genauso gross wie die ursprüngliche.
es sei denn, man gibt im block explizit mehrere elemente zurück oder auch die leere liste.
du könntest dein map so schreiben:
@array = map { $hash{$_} ? () : $_ } @objects;
dann wird mit () die leere liste zurückgegeben. aber dafür ist dann eigentlich grep gedacht:
@array = grep { ! $hash{$_} } @objects;