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