use base 'Sub::Attributes'; sub reverse_me : Arrayref(NOVOID) { # calling in void context is now fatal return reverse @_; } my @list = reverse_me(1,2,3); # (3,2,1) my $list = reverse_me(1,2,3); # [3,2,1] sub do_stuff : Iterator { # calling in void context is legal, but a no-op return @_; } my @list = do_stuff(1,2,3); # simply returns the list my $list = do_stuff(1,2,3); # iterator object print $iterator->next; # prints 1 print $iterator->next; # prints 2 print $iterator->next; # prints 3 print $iterator->prev; # prints 3 print $iterator->prev; # prints 2 print $iterator->prev; # prints 1