[Vienna-pm] Hausbackene Syntaxerweiterung mit Perl5?

Roland Giersig rgiersig at cpan.org
Wed Apr 30 07:26:19 PDT 2008


und wie schaut das aus?

@cleverlies = select {$_->{matrikelnr}} where {$_->{marks} > 85} from 
@students;

extra bonuspunkte für diejenigen, die jetzt lachend am boden liegen, 
weil sie die implementation von select, where und from schon vor augen 
haben... ;o)


Robert Barta wrote:
> On Wed, Apr 30, 2008 at 12:02:52PM +0200, Roland Giersig wrote:
>> Oder das alles nur per SQL abhandeln, mit DBI und einer in-memory SQLite 
>> DB im Hintergrund.
> 
> Um SQL geht's eigentlich nicht...
> 
>> Der Punkt ist: für wen sind diese Syntax-Überlegungen? Für einen 
>> Maintainer, der mehr SQL als Perl versteht?
> 
> ... sondern um einen Weg (persistente) Collections ueber _ein und
> denselben_ Mechanismus anzusprechen. D.h. bei
> 
>   @collection = from $s in @students .....
> 
> ist es fuer den Programmierer egal, ob die Studis aus einer SQL
> Datenkrank, aus dem memory oder einem XML Dokument, oder einem RDF
> Graphen geholt werden.
> 
>> Dem tust du keinen Gefallen, 
>> wenn du ihm SQL-ishe Perl-Syntax bietest, die dann doch nicht genau SQL 
>> ist. Da bist du besser dran, wenn du ihm einen Vereinfachungs-Wrapper um 
>> DBI schreibst, sodass die Operationen echtes SQL sind.
> 
> Right. Aber fuer das gibt's ja schon nen Haufen.
> 
> \rho
> 
>> Robert Barta wrote:
>>> On Wed, Apr 30, 2008 at 08:20:23AM +0200, Thomas Klausner wrote:
>>>>> 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.
>>> D.h., ich koennte das 1) einmal sehr Perl-ish angehen und etwas an
>>>
>>>    Tie::Array
>>>
>>> binden. Oder ...
>>>
>>>> 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, 
>>> .... 2) 'from' in the namespace laden, oder ....
>>>
>>>> From: Stefan Weiss <spaceman at foo.at>
>>>> Um deinen Sourcecode so umzuschreiben, dass nachher Perl rauskommt,
>>>> schau dir mal die Source Filter in "perldoc perlfilter" an, oder das
>>>> Modul Filter::Simple.
>>> .... 3) ein Praeprozessor einschieben.
>>>
>>> Klingt alles gangbar. Ich haette auch nicht notfalls vor
>>>
>>>   @collection = new LINQ::TM ('from ...');
>>>
>>> zurueckgeschreckt.
>>>
>>> <loud-thinking>
>>> 3) Bei preprocessors habe ich immer das Problem, dass sie nicht
>>>    leicht immer miteinander kombinierbar sind.
>>>
>>> 2) mit dem 'from' als Routine muss man analysieren, ob die Parameterliste
>>>    mit der Syntax, die ich erreichen will, halbwegs kompatibel ist. Bei
>>>
>>>      $s->{marks} > 85
>>>
>>>    hab ich schon das Problem, dass Perl das fuer mich auswerten will, bevor
>>>    'from' zum Zug kommt.
>>>
>>> 1) Tie::Array ist halt SEHR perl-ish. Not bad per se, aber nicht Sinn der
>>>    Uebung hier.
>>>
>>> </loud-thinking>
>>>
>>> \rho
>>>
>>> _______________________________________________
>>> Vienna-pm mailing list
>>> Vienna-pm at pm.org
>>> http://mail.pm.org/mailman/listinfo/vienna-pm
>>>
>> _______________________________________________
>> Vienna-pm mailing list
>> Vienna-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/vienna-pm
>>
> 


More information about the Vienna-pm mailing list