On Wed, Apr 20, 2005 at 05:08:51PM +0200, BÁRTHÁZI András wrote:
: Hi,
: 
: I'm just wondering, if the following would be possible with Perl 6 or not?
: 
: > XML
: 
: $a=<elems><elem>Content #1</elem><elem>Content #2</elem></elems>;
: 
: say $a.elems[0].elem[1].content; # "Content #1"
: 
: for ($a.elems) { say $_.content; }
: 
: or XPath like syntax on a structure?

That's somewhat ambiguous with our current qw// notoation.

: > SQL
: 
: $a=select * from table;
: for(select * from table where id>5) {
:   say $_.id ~ ' -> ' $_.value;
: }

That one would be pretty easy to do with a "select" macro, if you could
figure out how to terminate the SQL parse.

: The ideas coming from Comega, the next version of CSharp(?). Here's an 
: intro about it:
: 
: http://www.xml.com/pub/a/2005/01/12/comega.html?page=2
: 
: Or just search for "comega" with you favourite search engine.
: 
: The first one, creating native XML support for a language is not new, 
: E4X (EcmaScript for XML) is about the same:
: 
: http://www.ecma-international.org/publications/standards/Ecma-357.htm
: 
: I think both about macros, and it seem's it will be possible extend Perl 
: 6 with them. But what do you think about extending Perl 6 (or Perl 6.1) 
: with native XML handling, like it's native regular expression / rule 
: handling?

We should avoid installing fads or domain-specific sublanguages into
Standard Perl 6, but it's easy enough to change the language with a
single "use" or macro.  I see that doing select is trivial and doesn't
impact anything in Standard Perl 6, since Perl 5's select() is likely
going away anyway.

It's a little harder to sneak <foo>...</foo> into the language since 
we have <foo> to mean qw/foo/ as a term.  Perhaps this is indicating
that we should reserve a character for introducing user-defined terms.
I suppose the logical candidate for that is ` these days, since pretty
much everything else in ASCII land is taken.  So you could write
a macro on ` that treats the next thing as a self-terminating construct.
(That is, no terminating ` is required, though the default `...` could
still parse to mean q:x/.../, I suppose.  You'd lose that if you redefine
term:<`> to something else, but no big loss, unlike <foo>.)  Anyway,
you'd get things like:

    $a=`<elems><elem>Content #1</elem><elem>Content #2</elem></elems>;
    $a=`select * from table`;

I've gone ahead and terminated the sql variant like a quote construct
just to clarify the end of it, since SQL is not so obviously self-terminating
as XML is.

You could not, of course, have both of those unless you did lookahead
to see if the next thing was < or select.  Hmm, maybe that should be
standard behavior for user-defined ` extensions.  If the actual
macros were term:<`\<> and term:<`select>, then any unrecognized
`...` could still default to qx//.  Of course, then you'd have to be
careful about things like:

    $meow = `</dev/tty cat`;

We've also proposed reserving ` for introducing units, but that would
be where an operator is expected, not a term, so it doesn't conflict
with term usages unless you also want to use those terms as subscripts.
In other words, Juerd could overload postfix:<`> to do %hash`foo if he
still wants to do that, but then he couldn't also use ` to mark units.

Larry

Reply via email to