##
sub foo {
# ...
return wantarray? @foo : sub { shift @foo if @foo };
}
##
##
my @array = foo( $x );
foreach ( @array ) {
# do something
}
##
##
my $iter = foo( $x );
while ( my $row = $iter->() ) {
# do something
}