[Vienna-pm] Hausbackene Syntaxerweiterung mit Perl5?

Thomas Klausner domm at cpan.org
Tue Apr 29 23:20:23 PDT 2008


Hi!

On Wed, Apr 30, 2008 at 05:50:04AM +0200, Robert Barta wrote:

 
> Der Clue an dem LINQ ist, dass man mit dem selben Zugriffsmechanismus
> auf in-memory Objekte, relational DBs, XML structures, und - das
> interessiert mich hier hauptsaechlich - auf Topic Map und RDF KBs
> zugreifen kann. LINQ ist nun Teil von C# (das langsam Perl6 immer
> aehnlicher wird, naja langsam).

Naja, in Perl ist dieser Zugriffsmechanismus halt map, grep, each, etc, 
mit dem man auf in-memory Objekte, DBs, XML, ... zugreift.

> Ich moecht' hauptsaechlich einmal einen proof-of-concept mit TMs
> bauen. Die Syntaxerweiterung ist eigentlich eh Augenauswischerei,

Wirkliche Syntaxerweiterungen sind kaum moegliche in Perl 5, was ich 
weiss. Natuerlich kannst du aber mit cleveren Methoden, Importern und 
aehnlichem recht nette Interfaces basteln.

siehe zB Moose:

  package Foo;
  use Moose;
  has bar => (is => 'rw');    # 'has' ist eine exportierte Methode 


In deinem konkreten Fall:

>   my @students = ....;
>   my @cleverlies = from $s in @students
>                    where $s->{marks} > 85
>                    select $s->{matrikelnr};

koenntest du schon eine sub from { } machen, die die Parameterliste 
durchgeht, andere "keywords" wie 'where' und 'select' identifziert, 
rausfindet, was was ist (@students (muesste dann aber wohl \@students 
sein), $s), und dann zum Schluss die richtigen Methoden ('where', 
'select') in der richtigen Reihenfolge mit den richtigen Parametern 
aufruft.

Soundy mighty kompliziert.
Und nur schwer generalisierbar.
Aber durchaus moeglich.



-- 
#!/usr/bin/perl                              http://domm.plix.at
for(ref bless{},just'another'perl'hacker){s-:+-$"-g&&print$_.$/}


More information about the Vienna-pm mailing list