copy mymem replacing "a01" by "b07"
Lothar
- perl
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
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
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.
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
Danke für die ausführliche Information.
Die muss ich jetzt erst mal verdauen und verstehen.
Lothar
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
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.
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
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
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.