[Vienna-pm] Hausbackene Syntaxerweiterung mit Perl5?
Josef Schmid
e9427749 at stud4.tuwien.ac.at
Wed Apr 30 07:01:21 PDT 2008
Hi, allerseits!
Fühl mich mal wieder aufgerufen, auch meinem Senf dazuzugeben...
Robert Barta schrieb:
> On Wed, Apr 30, 2008 at 08:20:23AM +0200, Thomas Klausner wrote:
[...]
>> 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 ....
Hmm, mal sehen
wenn ich from ala "sub from (\$*\@*$*$);" deklarier,
dann könnte ich mal
my @students =();
freevars my $s;
my @cleverlies = from $s,in, at students,
where,$s->{marks} > 85,
select,$s->{matrikelnr};
schreiben, was aber
a) die zusätzlichen "," sehen ¬ gerade hübsch aus &
b) damit ich mit $s auch was anfangen kann, brauch
ich noch was, z.B. ala sub freevars (\$;\$\$\$....)
c) keine Ahnung wie ich die extra "keywords" überprüfe
(aber vielleicht könnte, dass wer posten)
Hmm 2. Versuch:
sub from (\$$);
sub in (\@$);
sub where ($$);
sub select ($); # mal abgesehen davon, daß es eh schon ...
freevars my $s;
my @cleverlies = from $s, in @students,
where $s->{marks} > 85,
select $s->{matrikelnr};
a) etwas weniger störende zusätzliche Beistriche.
b) dafür den Namensraum etwas mehr,
mit "nichtssagende" Funktionsnamen verschmutzt.
c) immer noch Trick um mit $s was anfangen zu können
nötig.
Hmm 3. Versuch:
Da uns der '&'-Prototyp nur was hilft wenn er an 1. Stelle steht...
müssten wir den Sytax abändern, z.B.
select { $a->{matrikelnr} } where { $a->{marks} } from @students;
Hmm, 4. Versuch:
Da wir ohnehin bei Versuch 1+2. wahrscheinlich um Operatorüberladung
¬ herumkommen, um where & select als Ausdruck wiederzubekommen.
Hmm, hmm, ...
...
<am kopf kratz/>
...
...
Also zu Versuch *Nr 5*:
my @cleverlies = do { from my $s, in @students;
select { $s->{matrikelnr} }
where { $s->{marks} > 85 }
};
Das hätte den vorteil das man die Namensraumverschmutzung
einschränken könnte.
Ein Trick den ich bisher noch nirgends angewandt gesehen habe.
<tamtam>
my @cleverlies = do { use linq; .... }
# %^H und so
und auch noch ausbaufähig
</tamtam>
Noch 'ne Möglichkeit:
freevars my $s;
my @c=from($s)->in(@students)
->where($s->{marks}> 85)
->select($s->{matrikelnr});
...
>> 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. [...]
> <loud-thinking>
> 3) Bei preprocessors habe ich immer das Problem, dass sie nicht
> leicht immer miteinander kombinierbar sind.
Neben Filter::Simple gibt es noch:
Module::Compile, Filter::Simple::Compile
und dann muss man aber noch Perl5 parsen: Parse::* oder PPI oder ...
<finger kreuz />
pfiateng,
Jos "hoffentlich niemanden verschreckt" ef
More information about the Vienna-pm
mailing list