PHP Funktion in Perl übernehmen
Christoph
- perl
0 Dirk Dorweiler0 Beat0 Dirk Dorweiler0 Beat0 Siechfred0 Dirk Dorweiler0 Beat0 Siechfred0 Beat
Hallo,
ich habe folgendes Problem.
Ich habe die Aufgabe ein altes PHP Skript in Perl zu überführen.
Mein Problem ist die Funktion "urlencode".
Bei meiner Recherche bin ich soweit das Perl über keine entsprechende Funktion verfügt.
Der Code Abschnitt:
$xurl .= "&JA=".urlencode($jname);
$xurl .= "&JT=".urlencode($journal);
$xurl .= "&VOL=".urlencode($vol);
$xurl .= "&PG=".urlencode($pages);
$xurl .= "&AAU=".urlencode($author);
$xurl .= "&ATI=".urlencode($title);
$xurl .= "&APY=".substr(urlencode($year),0,4);
Kann mir jemand einen Tipp geben wie ich das in Perl nachbilden kann?
Vielen Dank im voraus!
Christoph
Mahlzeit.
Vorweg sei erwähnt, dass ich keine Ahnung von PHP habe ;-)
CPAN kennst Du?
http://search.cpan.org
CGI.pm evtl. auch?
http://search.cpan.org/~lds/CGI.pm-3.41/CGI.pm
Wobei ich CGI zu fett finde, CGI::Minimal ist eine schöne Alternative:
http://search.cpan.org/~snowhare/CGI-Minimal-1.29/lib/CGI/Minimal.pod
Da gibt es dann auch (fast sogar das namentliche) Pendant url_encode, bzw. url_decode.
Grüße
Super!
Vielen Dank!
Kann mir jemand einen Tipp geben wie ich das in Perl nachbilden kann?
Core Modul
URI::escape ???
mfg Beat
Hoi!
Hey... gutes Stichwort.
Hab mich schön des öfteren gefragt: Was ist "Core" und woher krieg ichs raus?
http://perldoc.perl.org/index-modules-U.html
Listet URI::Escape nicht auf!?
Wo guckt man also?
Grüße
Hab mich schön des öfteren gefragt: Was ist "Core" und woher krieg ichs raus?
http://perldoc.perl.org/index-modules-U.html
Listet URI::Escape nicht auf!?
Wo guckt man also?
Ich habe in meiner 5.8 ActiveState Lokalen Dokumentation nachgeschaut.
Diese enthält nicht einmal alle Core Module (Module die eigentlich bei jeder Standard Installation vorhanden sind.).
Kleiner Tippfehler von mir:
<quote>
SYNOPSIS
use URI::Escape;
$safe = uri_escape("10% is enough\n");
$verysafe = uri_escape("foo", "\0-\377");
$str = uri_unescape($safe);
</quote>
Escape mit E statt e
mfg Beat
Hab mich schön des öfteren gefragt: Was ist "Core" und woher krieg ichs raus?
Das, was als "Core Modules" bezeichnet wird, gehört zum Sprachkern von Perl und sollte unter dem Oberbegriff "Perl Core" in jeder ernstzunehmenden Distribution enthalten sein. Weitere Auskunft, wie man die installierten Module ermitteln kann, gibt perlfaq3.
Übrigens: How do I decode or create those %-encodings on the web?, ganz ohne eigenes Modul.
Siechfred
Zunächst: Die Fragestellung ist für mein Werkeln nicht praxisrelevant, sofern ein Modul fehlt, wird es installiert.
In der Kommunikation mit dritten(die mangels Knowhow / Rechten etc. diese Möglichkeit nicht haben) wäre es allerdings schon schön, wenn man sagen könnte "Ahhh, OK! Bei Deiner Version kannste Modul XYZ verwenden".
Nun ist es aber so, dass z.B. URI::Escape von Perldoc nicht als Core aufgezählt wird, bei mir lokal in einer frisch installierten VM aber trotzdem vorhanden ist.
Lt. Beats Aussage fehlen in seiner Installation(OK, ActiveState ist ein Sonderfall) wiederum Module, die als Core geführt werden.
Übersehe ich da jetzt was Grundsätzliches oder stellt sich die Frage: Was konkret bringt die Ehre "Core"?
Grüße
Nun ist es aber so, dass z.B. URI::Escape von Perldoc nicht als Core aufgezählt wird, bei mir lokal in einer frisch installierten VM aber trotzdem vorhanden ist.
Lt. Beats Aussage fehlen in seiner Installation(OK, ActiveState ist ein Sonderfall) wiederum Module, die als Core geführt werden.
Übersehe ich da jetzt was Grundsätzliches oder stellt sich die Frage: Was konkret bringt die Ehre "Core"?
Core Module sind Module die von Perl höchst persönlich mitgeliefert werden (können). Das unterscheidet sie von CPAN Modulen.
Da wird es immer Abweichungen geben. Vorsichtig sollte man sein bei Perl 5.10 Modulen, wenn das Programm auf Perl 5.6 laufen soll.
Wenn man Unix (oder Windows) spezifische Module verwendet, ist klar, welche Einschränkung dies ergibt auf alternativen Systemen ergibt.
mfg Beat
In der Kommunikation mit dritten(die mangels Knowhow / Rechten etc. diese Möglichkeit nicht haben) wäre es allerdings schon schön, wenn man sagen könnte "Ahhh, OK! Bei Deiner Version kannste Modul XYZ verwenden".
Man kann eigentlich davon ausgehen, dass Core Module Bestandteil jeder Perl-Distribution sind, und das sollte eigentlich reichen. Damit bin ich bisher gut gefahren, und Ausnahmen wird es immer geben.
Nun ist es aber so, dass z.B. URI::Escape von Perldoc nicht als Core aufgezählt wird, bei mir lokal in einer frisch installierten VM aber trotzdem vorhanden ist.
Jeder Anbieter entscheidet, was er zusätzlich zum Core noch draufpackt. ActiveState liefert z.B. neben dem *vollständigen* Perl Core eine ganze Reihe von Win32- und Tk-Modulen mit, und die sind nicht Core.
Lt. Beats Aussage fehlen in seiner Installation(OK, ActiveState ist ein Sonderfall) wiederum Module, die als Core geführt werden.
Das ist mir so noch nicht untergekommen.
Siechfred
Lt. Beats Aussage fehlen in seiner Installation(OK, ActiveState ist ein Sonderfall) wiederum Module, die als Core geführt werden.
Das ist mir so noch nicht untergekommen.
Da war mal ein Thread [Link:http://forum.de.selfhtml.org/archiv/2008/6/t172571/#m1131379]
Ich schlug Net::SMTP vor weil ich auf meinem System von MIME::Lite nichts drauf hatte.
Da kanns also schon Unterschiede geben, was einer für selbstverständlich hält.
mfg Beat
Da kanns also schon Unterschiede geben, was einer für selbstverständlich hält.
Natürlich gibt es Unterschiede, aber sie sind im Laufe der Zeit deutlich geringer geworden. Und du hast nicht gesagt, was für eine Version von ActiveState du hast, weder hier noch in dem von dir verlinkten Thread. Die ist halbwegs aktuell?
Struppi.
Da kanns also schon Unterschiede geben, was einer für selbstverständlich hält.
Natürlich gibt es Unterschiede, aber sie sind im Laufe der Zeit deutlich geringer geworden. Und du hast nicht gesagt, was für eine Version von ActiveState du hast, weder hier noch in dem von dir verlinkten Thread. Die ist halbwegs aktuell?
Wurde zwar in diesem Thread schon genannt, aber hier ganz genau:
ActivePerl 5.8.7.813 -- Release
mfg Beat
Lt. Beats Aussage fehlen in seiner Installation(OK, ActiveState ist ein Sonderfall) wiederum Module, die als Core geführt werden.
Das ist mir so noch nicht untergekommen.
Da war mal ein Thread [Link:http://forum.de.selfhtml.org/archiv/2008/6/t172571/#m1131379]
Ich schlug Net::SMTP vor weil ich auf meinem System von MIME::Lite nichts drauf hatte.
Net::SMTP ist Core, MIME::Lite nicht. Wo ist da die Divergenz zwischen den Core-Modulen laut perldoc.perl.org und denen von ActiveState-Perl? Ich wiederhole es gerne noch einmal: Perl Core umfasst auch die Core-Module, nicht aber die Extensions.
Da kanns also schon Unterschiede geben, was einer für selbstverständlich hält.
Darum geht es doch gar nicht. Du hast gesagt, dass URI::Escape ein Core-Modul sei. Das ist falsch. Es mag bei Dir in der Distribution enthalten sein, will ich gar nicht in Abrede stellen, es ist aber nicht Bestandteil des Perl-Cores, den man - auch hier wiederhole ich mich - als kleinsten gemeinsamen Nenner aller Perl-Distributionen voraussetzen kann.
Siechfred
Darum geht es doch gar nicht. Du hast gesagt, dass URI::Escape ein Core-Modul sei. Das ist falsch. Es mag bei Dir in der Distribution enthalten sein, will ich gar nicht in Abrede stellen,
Also ich habe fast die gleiche Version wie Bleicher und es ist bei mir nicht im Core. Das Modul befindet sich bei mir unter D:\perl5.8\site\lib\URI, das Verzeichniss 'site' ist das wo sich die Nachinstallierten Module befinden.
Struppi.
Hallo Struppi!
Also ich habe fast die gleiche Version wie Bleicher
Ich bezweifle, dass _bleicher_ sich mit Perl beschäftigt ;)
Zum Thema: URI::Escape ist bei meinen drei ActiveState-Distributionen (5.7.x, 5.8.x und 5.10.0) dabei. Hier muss ich mich auf Siechfreds Aussage verlassen, dass es wohl an ActiveState liegt?
Viele Grüße aus Frankfurt/Main,
Patrick
Also ich habe fast die gleiche Version wie Bleicher
Ich bezweifle, dass _bleicher_ sich mit Perl beschäftigt ;)
https://forum.selfhtml.org/?t=176078&m=1158162
Zum Thema: URI::Escape ist bei meinen drei ActiveState-Distributionen (5.7.x, 5.8.x und 5.10.0) dabei. Hier muss ich mich auf Siechfreds Aussage verlassen, dass es wohl an ActiveState liegt?
Es ist bei mir im site/lib Ordner, bei dir nicht?
Struppi.
Hallo Struppi!
Zum Thema: URI::Escape ist bei meinen drei ActiveState-Distributionen (5.7.x, 5.8.x und 5.10.0) dabei. Hier muss ich mich auf Siechfreds Aussage verlassen, dass es wohl an ActiveState liegt?
Es ist bei mir im site/lib Ordner, bei dir nicht?
Bei der 5.8.7 ja (/Perl/site/lib/URI/Escape.pm).
Bei der 5.10.0 ist es direkt unter /lib: /Perl/lib/URI/Escape.pm). Bei dieser Version ist anscheinend alles unter /lib, denn /site/lib ist so gut wie leer. Ich habe da nur /site/lib/Acme (Acme::Current ist ein Modülche von Randal L. Schwartz - den hatte ich mir für Date::Today mal angeschaut und so kann es sein, dass ich es auch selbst installiert habe), site/lib/auto (was wiederum Acme/Current/.packlist als Einziges enthält) und eine Datei sitecustomize.pl, deren einzige Zeile lautet:
;)
Übrigens habe ich mich vorhin geirrt: ich habe keine 5.7.x sondern zwei Mal die 5.8.7 (auf dem alten Schleppi und auf dem PC). Die 5.10.0 habe ich auf dem neuen Schleppi.
Viele Grüße aus Frankfurt/Main,
Patrick
Es ist bei mir im site/lib Ordner, bei dir nicht?
Bei der 5.8.7 ja (/Perl/site/lib/URI/Escape.pm).
Bei der 5.10.0 ist es direkt unter /lib: /Perl/lib/URI/Escape.pm). Bei dieser Version ist anscheinend alles unter /lib, denn /site/lib ist so gut wie leer.
D.h. du hast noch keine Module mit ppm installiert.
Ich habe da nur /site/lib/Acme (Acme::Current ist ein Modülche von Randal L. Schwartz - den hatte ich mir für Date::Today mal angeschaut und so kann es sein, dass ich es auch selbst installiert habe),
Du kannst das ja leicht feststellen, wenn du das Erzeugungsdatum mit dem des Verzeichniss vergleichst.
Struppi.
Hallo Struppi!
D.h. du hast noch keine Module mit ppm installiert.
Bei 5.10 habe ich vermutlich Acme::Current installiert. Aber bei 5.8.x kann das nicht sein, denn so viele Sachen habe ich nicht nachinstalliert (maximal 10-15 Modulen), trotzdem ist site/lib mit 50 Objekte ziemlich voll...
Viele Grüße aus Frankfurt/Main,
Patrick
D.h. du hast noch keine Module mit ppm installiert.
Bei 5.10 habe ich vermutlich Acme::Current installiert. Aber bei 5.8.x kann das nicht sein, denn so viele Sachen habe ich nicht nachinstalliert (maximal 10-15 Modulen), trotzdem ist site/lib mit 50 Objekte ziemlich voll...
Kann ich bestätigen
mfg Beat
D.h. du hast noch keine Module mit ppm installiert.
Bei 5.10 habe ich vermutlich Acme::Current installiert. Aber bei 5.8.x kann das nicht sein, denn so viele Sachen habe ich nicht nachinstalliert (maximal 10-15 Modulen), trotzdem ist site/lib mit 50 Objekte ziemlich voll...
Es werden ja mit ppm auch Abhängigkeiten installiert, insofern ist die Zahl realistisch.
Struppi.
Hallo Struppi!
Es werden ja mit ppm auch Abhängigkeiten installiert, insofern ist die Zahl realistisch.
Mag sein, aber nicht dadurch, dass ich Module nachinstalliert habe, sondern bereits bei der ActivePerl-Installation: Ich habe Perl am 7.12.2005 auf diesem Rechner installiert (hatte ich Mitte November 2005 gekauft), und die ältesten Ordner in site/lib sind vom... 7.12.2005 12:29 (da habe ich wohl ActivePerl installiert).
Viele Grüße aus Frankfurt/Main,
Patrick
Es werden ja mit ppm auch Abhängigkeiten installiert, insofern ist die Zahl realistisch.
Mag sein, aber nicht dadurch, dass ich Module nachinstalliert habe, sondern bereits bei der ActivePerl-Installation: Ich habe Perl am 7.12.2005 auf diesem Rechner installiert (hatte ich Mitte November 2005 gekauft), und die ältesten Ordner in site/lib sind vom... 7.12.2005 12:29 (da habe ich wohl ActivePerl installiert).
Das ist erstaunlich, bei mir sind alle Neuer, bis auf die schon von dir erwähnte Datei und der auto Ordner. Du musst dir das Erstellungsdatum anzeigen lassen.
Struppi.
Ich bezweifle, dass _bleicher_ sich mit Perl beschäftigt ;)
Ok!Ok!
tut mir leid, Beat.
Struppi.
Da kanns also schon Unterschiede geben, was einer für selbstverständlich hält.
Darum geht es doch gar nicht. Du hast gesagt, dass URI::Escape ein Core-Modul sei. Das ist falsch. Es mag bei Dir in der Distribution enthalten sein, will ich gar nicht in Abrede stellen, es ist aber nicht Bestandteil des Perl-Cores, den man - auch hier wiederhole ich mich - als kleinsten gemeinsamen Nenner aller Perl-Distributionen voraussetzen kann.
Ja meine Bezeichnung als Core-Modul ist offenbar falsch, wenn du mit Core Modul einen Eintrag in einer bestimmten Website meinst.
Man merke, dass solche Core Modul Listen für die verschiedenen Versionen getrennt bestehen (5.10, 5.8 auf perlodoc.perl.org)
Es wird NICHT dokumentiert, was diese Listen genau darstellen.
Ich kann nur feststellen, dass die Einträge für 5.8 dort in meiner ActiveState vorhanden sind.
ActiveState macht in der Dokumentation keinen Unterschied.
Der einzige Anhaltspunkt bieten zwei Directories: /lib und /site/lib
wobei ich jetzt nicht geprüft wurde ob die 'Core Module' jetzt auch alle schön in /lib installiert wurden, und alles was nicht in der Liste aufgeführt wurde, artig sich in /site/lib befindet.
Ja URI::Escape ist in site/lib
Werde wohl den Begriff 'Core Modul' in Zukunft besser vermeiden, da eh nur mit einer Versionsangabe sinnvoll.
mfg Beat
ActiveState macht in der Dokumentation keinen Unterschied.
Der einzige Anhaltspunkt bieten zwei Directories: /lib und /site/lib
wobei ich jetzt nicht geprüft wurde ob die 'Core Module' jetzt auch alle schön in /lib installiert wurden, und alles was nicht in der Liste aufgeführt wurde, artig sich in /site/lib befindet.
Nein, in site befinden sich alle mit ppm nachinstallierten Module.
Ja URI::Escape ist in site/lib
D.h. du hast es nachinstalliert.
Struppi.
ActiveState macht in der Dokumentation keinen Unterschied.
Der einzige Anhaltspunkt bieten zwei Directories: /lib und /site/lib
wobei ich jetzt nicht geprüft wurde ob die 'Core Module' jetzt auch alle schön in /lib installiert wurden, und alles was nicht in der Liste aufgeführt wurde, artig sich in /site/lib befindet.
Nein, in site befinden sich alle mit ppm nachinstallierten Module.
Ja URI::Escape ist in site/lib
D.h. du hast es nachinstalliert.
Deine Glaskugel irrt.
Mit einer Formulieren wie 'Active State hat es bei der Installation automatisch nachinstalliert' könnte ich ja noch leben.
mfg Beat
Nein, in site befinden sich alle mit ppm nachinstallierten Module.
Ja URI::Escape ist in site/lib
D.h. du hast es nachinstalliert.Deine Glaskugel irrt.
Mit einer Formulieren wie 'Active State hat es bei der Installation automatisch nachinstalliert' könnte ich ja noch leben.
D.h. das Erstellungsdatum der Datei Espace.pm ist gleich oder kleiner dem Installationsdatum bzw. dem Erstellungsdatum der Verzeichnisse?
Ich seh aber gerade, hier auf einem anderen Rechner, ist das Modul im lib Verzeichnis, also im ActiveState Core. Hier ist aber eine 5.8.8 Version drauf.
Struppi.
Nein, in site befinden sich alle mit ppm nachinstallierten Module.
Ja URI::Escape ist in site/lib
D.h. du hast es nachinstalliert.
Deine Glaskugel irrt.
Mit einer Formulieren wie 'Active State hat es bei der Installation automatisch nachinstalliert' könnte ich ja noch leben.
D.h. das Erstellungsdatum der Datei Espace.pm ist gleich oder kleiner dem Installationsdatum bzw. dem Erstellungsdatum der Verzeichnisse?
Ja.
Ich seh aber gerade, hier auf einem anderen Rechner, ist das Modul im lib Verzeichnis, also im ActiveState Core. Hier ist aber eine 5.8.8 Version drauf.
Da scheinen offenbar ziemliche Unterschiede zu bestehen. Das können wir jetzt endlos verhandeln oder bei ActiveState gleich selbst nachfragen wann wo und wie die das geändert haben und für welche Umgebung.
Man soll auf den Inhalt von site/lib keine voreiligen Schlüsse ziehen, ob vom User nachinstalliert oder von ActiveState bei der ersten Installation dort eingerichtet.
mfg Beat
Ja meine Bezeichnung als Core-Modul ist offenbar falsch, wenn du mit Core Modul einen Eintrag in einer bestimmten Website meinst.
Diese Webseite ist die offizielle Perl-Dokumentation der Perl-Foundation, also durchaus eine zuverlässige Quelle.
Werde wohl den Begriff 'Core Modul' in Zukunft besser vermeiden
Och, dazu besteht kein Anlass, im Zweifel siehe Module::CoreList :)
da eh nur mit einer Versionsangabe sinnvoll.
Wieso? Eigentlich kann man m.E. Perl 5.8 voraussetzen, und so schlimm viele Module wurden danach nicht mehr zu Core-Modulen gemacht.
Siechfred