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