From:Christian Lackas
Date:13.7.01 14:01
Subject:Re: PERL in SA?
Reply-To:<imperia-users@imperia.de>
References:
  • 13.7.01 13:29 Markus Uhl
    [IMPERIA] PERL in SA?
  • Attachments:[Source] unknown-1.pgp (application/pgp-signature)
    * Markus Uhl <Markus.Uhl@ecrc.de> [010713 13:35]:
    
    Hallo Markus,
    
    > Mein Problem: kann ich in einem Site-Active Imperia- und (heftigen)
    > PERL-Code mischen?
    
    so wie Du das meinst: nein. Ein <IMPERIA>-Tag kann keine weiteren
    <IMPERIA>-Tags enthalten.
    
    > Und weil ich ein alter Rumspieler bin: wenn ich den Perl-Block Zeile
    > für Zeile mit PERL-EVAL angebe, kommt irgendwie auch nicht ganz das
    > heraus, was ich mir vorstelle. Hat z.B. schon mal jemand folgendes
    > probiert:
    
    Es kommt aber genau das raus, was rauskommen soll :-).
    
    > <IMPERIA>
    > READDIR "/de/produkte"
    > FOREACH FOUND {
    > 	PERLEVAL print $count++;
    
    Warum nicht einfach:
    
    PERLEVAL $count++
    
    BTW: In diesem Fall wuerde man natuerlich <!--LOOPCOUNT--> verwenden.
    
    > }
    > </IMPERIA>
    > 
    > Kann sich irgendjemand erklären, warum dann z.B. 
    > 01 11 21 31 41 51 61 71 
    
    Ja. Bei PERLEVAL bekommst Du den *Rueckgabewert* Deines Ausdrucks noch
    mit dazu. In diesem Fall also von print und der ist 1.
    Grund:
    *Ausserhalb* von FF-Schleifen musst Du Text mit PRINT ausgeben,
    innerhalb erscheint der Text direkt (also ohne PRINT). Darum zeigt
    PERLEVAL innerhalb von FF-Schleifen das gleiche verhalten.
    
    > Hat vielleicht jemand eine Idee, wie man sinnvoll "richtigen" PERL-Code
    > (also nicht nur mal eben ein einfaches print "irgendwas") innerhalb der
    > FOREACH FOUND Schleife nutzen kann oder kann ich wirklich nur ENTWEDER
    > Imperia- ODER Perl-Code verwenden? Muß ich dann wirklich die ganze
    > READDIR-Funktionalität doch wieder selber in PERL schreiben??? Bäh...
    > ;o)
    
    Leider gibt es das erweiterte Perl-Plugin (mit Funktionen wie readdir(),
    filemask(), sort_latest_first() und Co. erst in Imperia 6 (als neues
    Feature). Damit waere das dann natuerlich kein Problem.
    Du kannst aber ja mal beim Customer Service anfragen, ob es u.U. eine
    Moeglichkeit gibt das Plugin jetzt schon fuer i5 zu beziehen.
    
    Ansonsten wirst Du Dich wohl mit PERLEVAL 
    
    --- template ---
    <IMPERIA>
            # Wir laden eine externe Datei
            # und evaluieren den enthaltenen Perl-Code im Package
            # Imperia::eval.
            EVAL VAR-mysub = <!--INCLUDE:/active/def_oneline.pl-->
    </IMPERIA>
    
    <IMPERIA>
            READDIR "/active/data"
            FOREACH FOUND {
                    PERLEVAL Imperia::eval::def(10);
            }
    </IMPERIA>
    
    --- /active/def_oneline.pl ---
    sub def { $_[0] + 1 }
    ---
    
    def_oneline.pl kann man ja leicht aus dem Original def.pl erzeugen indem
    man die Zeilenenden (und Kommentare und sowas) entfernt. Dann kann man
    beliebig viel Code in einer leicht wartbaren Form erzeugen und in seinem
    <IMPERIA>-Tag nutzen. Ist aber natuerlich nur ein Hack.
    
    Gruss
     Christian
    
    -- 
    Imperia AG - Development
    Königstr. 29 - D-52064 Aachen - http://www.imperia.net/
    The i6 branch of Imperia consists of 182,505 lines of
    perl code (including comments - Fri Jul 13 04:46:24 2001).
    
    
    Thread (PERL in SA?)

    © 2001, 2002 marchive.pl Christian Lackas

    [HOME]   [MARCHIVE]   [INDEX]   [IMPERIA]   [IMPRESSUM]   [DELTA]