Not really sure what you're trying to achieve, i.e. in what way the first two variants "work as expected".
If the idea is simply to be able to call the routine with a reference to an array which is empty, such as ding( [] ), your first version is all that is required. No ... || () or some such is necessary.
If, OTOH, you want to be able to call the routine with something else than an arrayref, e.g. no argument at all, none of your three variants really work. All three would die with "Can't use an undefined value as an ARRAY reference" when run under use strict. In this case, you probably want to explicitly test if the argument is a reference to an array:
sub ding { my @foo = ref $_[0] eq "ARRAY" ? @{$_[0]} : (); ... }
In reply to Re: Dereference Empty(!) Array
by Eliya
in thread Dereference Empty(!) Array
by lukestyle
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |