Jan22: Unterschied zwischen "URI::Escape" und "URL::Encode"

Hallo,

Ich möchte einen String url-encoden, der bspw ein "+" enthält.

Bei der Google-Suche bin ich dabei auf die beide Module "URI::Escape" und "URL::Encode" gestoßen.

Nun suche ich den/ die Unterschied/e zwischen diesen beiden PERL-Modulen. Kann mir da bitte jemand auf die Sprünge helfen?

Ich habe mir mal auf einen Windowsrechner, auf dem ActiveState-PERL läuft, das Modul "URL::Encode" mittels 'ppm' (dem ActiveState-Paketmanager) installiert.

Mein Testskript sieht so aus:

use URL::Encode;
print url_encode("sdfsdsdöfsdf##++");

Ich erhalte nun diese Fehlermeldung: "Undefined subroutine &main::url_encode called"?!?! Was habe ich falsch gemacht?

Vielen Dank Jan

  1. Hallo,

    Mein Testskript sieht so aus:

    use URL::Encode;
    print url_encode("sdfsdsdöfsdf##++");
    

    Ich erhalte nun diese Fehlermeldung: "Undefined subroutine &main::url_encode called"?!?!

    Die Funktionen müssen importiert werden, das geht so:

    use URI::Encode qw(uri_encode uri_decode);
    

    Und ja

    .

    1. Vielen Dank!

      1. Schön 😉

        Und als Ergänzung:

        use Modul (); # kein Import
        require Modul; # auch kein Import
        
        # aber
        Modul::function(); # geht immer
        

        MfG

        1. Warum muss man manchmal in den Klammern die Funktionen angeben und manchmal nicht?

          Hier brauche ich es bspw nicht:

          use CGI;
          use DBI;
          use strict;
          use File::Basename;
          use Template;
          use LWP::UserAgent;
          use HTML::Entities;
          use HTTP::Request::Common;
          use Data::Dumper;
          use Time::Piece;
          

          Danke Jan

          1. Die Anwort gibt der Exporter mit dem Verständnis des gesamten Exportmechanismus. Der Exporter schuat in dem Modulen nach einem Array @EXPORT, alle Symbole die darin enthalten sind, werden automatisch exportiert. Sie sind also mit use Foo; nicht anzugeben.

            Das andere Array ist @EXPORT_OK da stehen die Symbole drin, die im use Foo qw(asdf) also explizit anzugeben sind.

            Des Weiteren gibt es innerhalb einer Package die Möglichkeit, eine Funktion import zu definieren. Sie wird automatisch aufgerufen beim Einbinden der Package mit use siehe ebenda.

            MfG

            1. Ah ok.

              Also müsste ich bei jeder Nutzung eines Moduls da erst mal in dem Modul nachschauen, was in @EXPORT steht?

              Danke Jan

              1. Ah ok.

                Also müsste ich bei jeder Nutzung eines Moduls da erst mal in dem Modul nachschauen, was in @EXPORT steht?

                Nein. Schau in die POD. Dafür gibt es perldoc und eine umfangreiche HTML Dokumentation direkt auf Deinem Rechner.

                Das Entwickeln eigener Module ist da auch beschrieben.

                MfG