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