At 3:37 PM +0000 1/18/02, Piers Cawley wrote:
>Michael G Schwern <[EMAIL PROTECTED]> writes:
>
>Hmm... making up some syntax on the fly. I sort of like the idea of
>being able to do
>
> class File;
> sub foreach ($file, &block) is Control {
> # 'is Control' declares this as a control sub, which, amongst
> # other things 'hides' itself from caller. (We can currently
> # do something like this already using Hooks::LexWrap type
> # tricks.
>
> open my $fh, $file or die $!; POST { close $fh }
>
> while (<FILE>) {
> my @ret = wantarray ?? list &block() :: (scalar &block());
> given $! {
> when c::RETURN { return wantarray ?? @ret :: @ret[0] }
> }
> }
> }
>
>This is, of course, dependent on $! not being set to a RETURN control
>'exception' in the case where we just fall off the end of the block.
I don't think you'll see $! being set to anything other than real
errors. Larry may change that, but I'd doubt it. It's more a global
status than anything else. Exceptions would go elsewhere, I'd hope.
I personally would like to see subs be taggable as transparent to
yielding, so if you call a sub, and it calls a sub, that inner sub
could yied out of the caller if the caller was transparent. Not,
mind, that the scheme doesn't have issues, but...
>It's also dependent on being able to get continuations from caller
>(which would be *so* cool)
For some brainwarping version of cool. :)
> > allow this:
>>
>> File.foreach('/usr/dict/words') { print }
>
>Sounds plausible to me.
>
>> or would the prototype be (&file, &block)?
>
>I prefer the ($file, &block) prototype.
I think it'll be ($file, &block), as that makes the most sense.
--
Dan
--------------------------------------"it's like this"-------------------
Dan Sugalski even samurai
[EMAIL PROTECTED] have teddy bears and even
teddy bears get drunk