Lothar: copy mymem replacing "a01" by "b07"

Hallo,
aus der Dinosaurierzeit kenne ich noch die Cobol-Anweisung
'copy replacing a by b'. Sie bewirkte das Kopieren eines Textes/Codes mymem in das aktuelle Programm, wobei gleichzeitig jedes a01 durch b07 ersetzt wurde.
Gibt es eine ähnliche Möglichkeit in Perl?
Grüße aus HH
Lothar

  1. aus der Dinosaurierzeit kenne ich noch die Cobol-Anweisung

    Könntest du mir als jemandem, der Cobol nur vom Namen her kennt, bitte erklären, was genau du machen willst?

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Könntest du mir als jemandem, der Cobol nur vom Namen her kennt, bitte erklären, was genau du machen willst?

      Ich habe im Perl-Programm, das HTML-Seiten generiert.

        
      # .....  
      print <<AAA;  
         <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" .....  
         <html>  
         <head>  
         <link rel="stylesheet" type="text/css" href="..../s.css">  
         <script type="text/javascript" src=".....JSlib/jspr.js"></script>  
         </head>  
         <body>  
      AAA  
        
      getinc ("dir");  
        
      print <<BBB  
      ....  
      BBB  
        
      getinc ("impressum");  
      .....  
        
      print <<CCC  
      .....  
      </body>  
      </html>  
      CCC  
      
      

      Dazu liest es mit einem Unterprogramm getinc Bausteine, die in verschiedenen HTML-Seiten gleich sind

        
             $url="....." . shift . "inc";  
             $ua = LWP::UserAgent->new();  
             $req = HTTP::Request->new("GET" => $url);  
             $res = $ua->request($req);  
             # Fehlerabfrage  
             $seite = $res->content();  
             print $seite;  
      
      

      Das Ganze funktioniert einwandfrei.
      Wenn ich aber in einem der inc-Dateien einen Wert habe, der abhängig sein soll von dem Programm, in das es kopiert werden soll, funktioniert das nicht mehr.
      In anderen Worten:
      Eine globale Variable im Hauptprogramm wird in dem kopierten Teil nicht erkannt.

      1. Könntest du mir als jemandem, der Cobol nur vom Namen her kennt, bitte erklären, was genau du machen willst?
        Ich habe im Perl-Programm, das HTML-Seiten generiert.

        Du machst es dir ziemlich schwer, finde ich. Wie wäre es mit einem Template, evtl. hilft dir mein kleines Beispiel zu HTML::Template.

        Wenn ich aber in einem der inc-Dateien einen Wert habe, der abhängig sein soll von dem Programm, in das es kopiert werden soll, funktioniert das nicht mehr.

        Kommt drauf an, wie du die inc-Dateien einbindest. Nimmst du do, wäre sowas denkbar:

        # test.inc  
        $wert = 'The answer is ' . $wert;
        

        Und das Script dazu:

        use strict;  
        use diagnostics;  
          
        our $wert = 42;  
        do 'test.inc';  
        print $wert; # The answer is 42
        

        Du könntest den ausgelagerten Code auch via require einbinden, das würde identisch funktionieren. Du könntest den zu exportierenden Wert auch einer inkludierten Sub übergeben:

        # test.inc  
        sub the_answer {  
          return 'The answer is ' . shift;  
        }  
          
        1;
        

        Und das Script dazu:

        use strict;  
        use diagnostics;  
          
        my $wert = 42;  
        require 'test.inc';  
        print the_answer($wert);
        

        Würdest du den Code zu test.inc als Modul via use einbinden wollen, so müsstest du ihn auch in als Modul (Endung pm) speichern, z.B. als 'answer.pm'. Das sähe dann so aus:

        use strict;  
        use diagnostics;  
        use answer;  
          
        my $wert = 42;  
        print the_answer($wert);
        

        Welche Variante dir am sympathischsten ist, musst du entscheiden, ich persönlich ziehe die use-Variante vor.

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
        1. Danke für die ausführliche Information.
          Die muss ich jetzt erst mal verdauen und verstehen.
          Lothar

        2. Hallo Siechfred,
          ich wollte Dein Template-Beispiel bei mir testen, bin aber schnell an Grenzen gestoßen.
          Wenn du nachfolgendes liest, wirst Du erkennen, dass ich nach der Methode "try on error" vorgehe. Aber ich bin noch nicht so tief drin in der Materie.
          Zuerst wurde Template.pm nicht gefunden. Ich habe es dann gesucht und an mehreren Stellen gefunden. Das habe ich dann in eine der zugeordneten Bibliotheken:

          /httpd/docs/cgi-shared/module
          /httpd/docs/cgi-shared/speziell
          C:/xampp/perl/site/lib/
          e:\myinternet\test\cgi-bin
          C:/xampp/perl/site/lib
          C:/xampp/perl/lib
          .
          C:/xampp/apache

          kopiert und zwar in
          C:/xampp/perl/site/lib/
          Da hat er sie auch nicht gefunden.
          Dann habe ich geforscht und herausgefunden, dass Template.pm wohl in einer lib HTML liegen müßte.
          Davon gabe es aber auch wieder einige auf meinem Laufwerk C:
          Die habe ich dann mit set lib ... zugeordnet.
          Jetzt wurde Template.pm zwar gefunden, aber es kommt die Fehlermeldung:
          Can't locate object method "new" via package "HTML::Template" (perhaps you forgot to load "HTML::Template"?)
          Aber einen Load-Befehl, den ich evtl. anpassen müsste habe ich in Deinem Beispiel nicht gefunden.
          Ich bin daher jetzt am ende meiner Weisheit und bitte um Hilfe!
          Danke
          Lothar

          1. ich wollte Dein Template-Beispiel bei mir testen, bin aber schnell an Grenzen gestoßen.

            und zwar mit dem Installieren von Modulen. Was für ein Perl hast du?
            ActiveState? Da gibt es einen Paketmanagar, einfach mal ppm ausführen je nach Version ist das ein Windows oder ein DOS Programm.

            Man könnte das Modul auch händisch installieren, dann fehlt aber die Doku und evtl. Abhängigkeiten

            Struppi.

            1. Was für ein Perl hast du?
              ActiveState?

              ?? Habe es mit dem XAMPP-Paket installiert ohne besondere Angaben.

              Da gibt es einen Paketmanagar, einfach mal ppm ausführen je nach Version ist das ein Windows oder ein DOS Programm.

              ppm.bat habe ich gefunden, da öffnet sich Perl Package Manager.
              Ich habe dann alle möglichen Aktionen durchgeführt

              • Refresh all data
              • verify packages
              • verify active state relocate tree

              aber ohne Erfolg.
              Wie müßte denn das Package heißen? und wie bekommt man ein neues hinzu?
              Unter den angezeigten Packages befinden sich
              HTML-Ajax
              HTML-Parser
              HTML-Tag
              HTML-Tagset
              HTML-Tree

              Danke Lothar

              1. ppm.bat habe ich gefunden, da öffnet sich Perl Package Manager.
                Ich habe dann alle möglichen Aktionen durchgeführt

                • Refresh all data
                • verify packages
                • verify active state relocate tree

                Keine Ahnung ich hab die alte Version, gibt's keine Hilfe?

                Wie müßte denn das Package heißen? und wie bekommt man ein neues hinzu?

                HTML::Template

                Struppi.