On Fri, Dec 03, 2004 at 09:31:33AM -0800, Larry Wall wrote:
: I guess the only real argument against unifying is that neither of
: 
:     for [EMAIL PROTECTED] {...}
: 
: or
: 
:     for @foo {...}
: 
: indicate destructive readout.  Which probably says that *
: is the wrong operator to use for that, which undoes our pretty
: 
:     for * {...}

This is all muddled thinking anyway, since [EMAIL PROTECTED] would read the 
arguments,
not the lines from the files contained in the arguments.  Despite the
history of ARGV in Perl 5, I wonder if it's a mistake to overload @ARGS
and $ARGS to mean two different things.

On the other hand, it'd be nice if we could end up with something
readable like:

    for .lines {...}

where the implicit invocant of Main knows how to iterate magically through
the lines of @ARGS.  I suppose that implicit invocant could be named $ARGS.
The magic still consists of making a bunch of filenames look like a single
filehandle.  A method like .lines could work either on a filehandle, or
on a string representing a filename, or an array of filehandles, or an
array of strings representing filenames.

We also potentially get things like

    for .slurp {...}
    for .paragraphs {...}

But we have to be careful with things like

    for "foo".bytes {...}

since "foo".bytes returns 3, not the bytes of file "foo".  So there
needs to be some intermediate method to say that you mean io.  Taking a
page fro IO::All, I suppose we could have "foo".io.bytes or some such.
But $ARGS would already be an io object, so people presumably wouldn't
have to always say

    for .io.lines {...}

As I've said before, I like the idea of IO:All, except for the
overloading of < and >.  Perhaps we could go with <== and ==> instead.

Larry

Reply via email to