/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Selvgenererende kode
Fra : Morten Guldager


Dato : 16-09-06 10:37

Hejsa,

Jeg vil gerne lave en package som "producerer sig selv"

Alle metoderne kan autogenereres ud fra et simpelt stykke
kode. Det skal dog gøres runtime. (f.eks. i en BEGIN blok)

Men jeg kan dog ikke lige gennemskue en brugbar syntax der
kan klare ærterne. Forslag?

Jeg _tror_ ikke eval er sagen.


/Morten

 
 
Michael Zedeler (16-09-2006)
Kommentar
Fra : Michael Zedeler


Dato : 16-09-06 11:26

Morten Guldager wrote:
> Jeg vil gerne lave en package som "producerer sig selv"
>
> Alle metoderne kan autogenereres ud fra et simpelt stykke
> kode. Det skal dog gøres runtime. (f.eks. i en BEGIN blok)
>
> Men jeg kan dog ikke lige gennemskue en brugbar syntax der
> kan klare ærterne. Forslag?
>
> Jeg _tror_ ikke eval er sagen.

Hvorfor skulle man ikke kunne bruge eval?

$min_kode = funktion_der_laver_en_masse_kode();
eval($min_kode);

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Morten Guldager (16-09-2006)
Kommentar
Fra : Morten Guldager


Dato : 16-09-06 12:28

2006-09-16 Michael Zedeler wrote
> Morten Guldager wrote:
>> Jeg vil gerne lave en package som "producerer sig selv"
>>
>> Alle metoderne kan autogenereres ud fra et simpelt stykke
>> kode. Det skal dog gøres runtime. (f.eks. i en BEGIN blok)
>>
>> Men jeg kan dog ikke lige gennemskue en brugbar syntax der
>> kan klare ærterne. Forslag?
>>
>> Jeg _tror_ ikke eval er sagen.
>
> Hvorfor skulle man ikke kunne bruge eval?
>
> $min_kode = funktion_der_laver_en_masse_kode();
> eval($min_kode);

Jo, det er jeg med på.

Men den generede kode skal ende som en package jeg kan
servere for SOAP::Lite.

Jeg koder på en SOAP server. (standalone, ingen apache her...)

SOAP::Lite fodres med et package navn, og så bliver alle
sub's i den package gjort tilgængelige.

Hvis jeg bruger eval, så er det helel jo væk igen når
eval afsluttes.

Så skal jeg måske ud i noget med at have _hele_ molevitten
inde i min eval? (det bliver da vist lidt uoverskueligt)

Mon jeg kan lave en generisk funktion som kan have flere
navne i min package, og hvor kunktionen selv kan "se"
hvilket navn den blev kaldt med netop denne gang?

Jeg må vel kunne tage en ref af min finktion, og så skrive den
ned i den hash der ligger til grund for en package.

Jeg kan dog ikke lige gennemskue en brugbar syntax hertil.


/Morten

Michael Zedeler (16-09-2006)
Kommentar
Fra : Michael Zedeler


Dato : 16-09-06 22:51

Morten Guldager wrote:
> 2006-09-16 Michael Zedeler wrote
>
>>Morten Guldager wrote:
>>
>>>Jeg vil gerne lave en package som "producerer sig selv"
>>>
>>>Alle metoderne kan autogenereres ud fra et simpelt stykke
>>>kode. Det skal dog gøres runtime. (f.eks. i en BEGIN blok)
>>>
>>>Men jeg kan dog ikke lige gennemskue en brugbar syntax der
>>>kan klare ærterne. Forslag?
>>>
>>>Jeg _tror_ ikke eval er sagen.
>>
>>Hvorfor skulle man ikke kunne bruge eval?
>>
>>$min_kode = funktion_der_laver_en_masse_kode();
>>eval($min_kode);
>
>
> Jo, det er jeg med på.
>
> Men den generede kode skal ende som en package jeg kan
> servere for SOAP::Lite.
>
> Jeg koder på en SOAP server. (standalone, ingen apache her...)
>
> SOAP::Lite fodres med et package navn, og så bliver alle
> sub's i den package gjort tilgængelige.
>
> Hvis jeg bruger eval, så er det helel jo væk igen når
> eval afsluttes.

Øh. Nej. Koden evalueres i din eksisterende kontekst med alle de
sideeffekter, der kan være.

$sub = <<EOM;
sub hej {
   print "Hej\n";
}
EOM

eval($sub);
hej();

Vil udskrive "Hej\n". Prøv selv.

> Mon jeg kan lave en generisk funktion som kan have flere
> navne i min package, og hvor kunktionen selv kan "se"
> hvilket navn den blev kaldt med netop denne gang?

Det kan man også godt, men det er temmelig grimt og ødelægger en del
muligheder, der er rare at have.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Morten Guldager (17-09-2006)
Kommentar
Fra : Morten Guldager


Dato : 17-09-06 08:38

2006-09-16 Michael Zedeler wrote
> Morten Guldager wrote:
>>
>> Hvis jeg bruger eval, så er det helel jo væk igen når
>> eval afsluttes.
>
> Øh. Nej. Koden evalueres i din eksisterende kontekst med alle de
> sideeffekter, der kan være.
>
> $sub = <<EOM;
> sub hej {
>    print "Hej\n";
> }
> EOM
>
> eval($sub);
> hej();
>
> Vil udskrive "Hej\n". Prøv selv.

Jo, det ser jeg nu.... Jeg havde faktisk været i den retning
men må have fumlet, for det spillede ikke. Men efter endnu et
forsøg virker det fint nu.


/Morten

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste