http://www.perlmonks.org?node_id=710184


in reply to Re^2: Avoiding vivification with array slice
in thread Avoiding vivification with array slice

The point of the defined wasn't to prevent autovivification, but to implement the grep you had in your original code. The following two snippets are equivalent.
@b = map { defined($a[$_]) ? ($a[$_]) : () } 0..5;
@b = grep { defined } map { $a[$_] } 0..5;

What you suggested (@b = map { $a[$_] } 0..5;) is *not* equivalent.