Nathan Wiger writes:
: > : This one. I see a filehandle in *boolean* context meaning "read to $_",
: > : just like the current "while (<FOO>)" magic we all know and occasionally
: > : love. I'd expect $FOO.readln (or something less Pascalish) to do an
: > : explicit readline to a variable other than $_
: >
: > It would be $FOO.next, but yes, that's the basic idea.  It's possible
: > that iterator variables should be more syntactically distinquished than
: > that.  One could, I suppose, make up something about $<FOO or $<FOO>
: > meaning the same thing thing as $FOO.next, for people who are homesick
: > for the angles, but I haven't thought that out, and don't even dare to
: > mention it here for fear someone will take it as a promise.  Er, oops...
: 
: So, just to clarify, the thought is:
: 
:    print while ($FOO);    # like Perl 5 <FOO>
:    $var = $FOO.next;      # like Perl 5 $var = <FOO>;
: 
: I assume that this is indicative of a more general iterator syntax, and
: subject to indirect objects?
: 
:    $FH = open "<$file" or die "Can't open $file: $!";
:    $line = next $FH;
: 
: If so, I can live with that.

Yes, that's the reason it's C<next>, and not something more specific
like C<readline>, which isn't even true in Perl 5 when $/ is mungled.

We do have to worry about the C<next> loop control function though.
It's possible that in

    FOO: while (1) {
        next FOO if /foo/;
        ...
    }

the C<FOO> label is actually being recognized as a pseudo-package
name!  The loop could well be an object whose full name is C<MY::FOO>.
Or something like that.  But maybe that's a gross hack.  Seems a bit
odd to overload C<next> like that.  Maybe we need a different word.

Larry

Reply via email to