I don't know if this is a common idiom, but I thought it was interesting, so I'm sharing with you.
This is a common way to return lists or references, depending on the calling context:
sub foo { # ... return wantarray? @foo : \@foo; }
Now, since I was studying how to create iterators using closures, I tried this:
sub foo { # ... return wantarray? @foo : sub { shift @foo if @foo }; }
In other words, "return a list or an iterator": we can call the function like this:
my @array = foo( $x ); foreach ( @array ) { # do something }
And we can call it "iteractivelly":
my $iter = foo( $x ); while ( my $row = $iter->() ) { # do something }
As I said, I'm not sure if this is a common idiom (or even an useful one), but it seemed interesting so I decided to share with you. : )
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Return a list or an iterator
by ysth (Canon) on Apr 17, 2006 at 10:23 UTC | |
by Anonymous Monk on Apr 17, 2006 at 18:56 UTC | |
by gaal (Parson) on Apr 17, 2006 at 10:29 UTC | |
Re: Return a list or an iterator
by Limbic~Region (Chancellor) on Apr 17, 2006 at 12:47 UTC | |
Re: Return a list or an iterator
by rinceWind (Monsignor) on Apr 17, 2006 at 12:37 UTC | |
Re: Return a list or an iterator
by gaal (Parson) on Apr 17, 2006 at 10:23 UTC | |
Re: Return a list or an iterator
by dpuu (Chaplain) on Apr 17, 2006 at 17:16 UTC | |
Re: Return a list or an iterator
by salva (Canon) on Apr 17, 2006 at 12:20 UTC | |
Re: Return a list or an iterator
by salva (Canon) on Apr 17, 2006 at 12:39 UTC | |
Re: Return a list or an iterator
by Jenda (Abbot) on Apr 18, 2006 at 15:55 UTC | |
Re: Return a list or an iterator
by aufflick (Deacon) on Apr 24, 2006 at 06:21 UTC |
Back to
Meditations