Login
Newsletter
Mo, 9. Juli 2018, 16:00

Perl-Module aus dem aktuellen Verzeichnis laden

In Perl ist es inzwischen nicht mehr ohne weiteres möglich, Module aus dem aktuellen Verzeichnis zu laden. Hier werden einige der Möglichkeiten aufgezeigt, das zu ändern.

Seit Perl 5.26 ist das aktuelle Verzeichnis nicht mehr im Suchpfad der nachzuladenden Module. Aufgrund einer 2016 entdeckten Sicherheitslücke haben viele Distributionen bereits eine entsprechende Änderung in den Standardeinstellungen vorgenommen, unabhängig von der eingesetzten Perl-Version.

Was generell gut für die Sicherheit ist, ist im Einzelfall ein Problem für Anwendungen, die sich darauf verlassen haben, ihre Module relativ zum aktuellen Arbeitsverzeichnis zu finden. Was kann man tun, um diese Anwendungen funktionsfähig zu halten? Man benötigt keine Speziallösungen, denn es gibt eine Reihe von Standardmethoden.

  • Die beste Möglichkeit ist sicher, das Programm zu ändern und den Ort oder die Orte, von denen Module gelesen werden sollen, zu übergeben oder zu konfigurieren. Dazu gibt es verschiedenste Möglichkeiten. Letztlich fügt man die konfigurierten Pfade der Perl-Variablen @INC hinzu.

  • Etwas einfacher, aber nur bei genau geprüften Programmen zu empfehlen, ist es, das aktuelle Verzeichnis zu @INC hinzuzufügen:

    push(@INC, ".");
    

    In realem Code würde man vorher noch prüfen, ob . bereits in @INC enthalten ist, um es nicht ein zweites Mal hinzuzufügen.

  • Wenn man den Code nicht ändern will, kann man entweder mit den Umgebungsvariablen PERL5LIB oder PERLLIB (ersteres hat Vorrang) oder mit der Option -I das aktuelle Verzeichnis oder spezifische Modulverzeichnisse hinzufügen.

  • Unter Debian kann man momentan auch die Umgebungsvariable PERL_USE_UNSAFE_INC setzen, z.B. auf 1 oder einen anderen von 0 verschiedenen Wert. Dies ergibt sich daraus, dass Perl bei jedem Aufruf eine Datei sitecustomize.pl aufruft. Der genaue Pfad hängt von der Installation ab, liegt aber meist unter /etc. Bei Debian ist es die Datei /etc/perl/sitecustomize.pl, die im Wesentlichen nur eine Anweisung enthält:

    pop @INC if $INC[-1] eq '.' and !$ENV{PERL_USE_UNSAFE_INC};
    

    Es sei darauf hingewiesen, dass die Umgebungsvariable PERL_USE_UNSAFE_INC nur mit Debian 9 funktioniert und wahrscheinlich schon in Debian 10 verschwunden sein wird.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Kommentare (Insgesamt: 5 || Alle anzeigen )
Re: Noch besser .... (Anonymous, Di, 10. Juli 2018)
Re: Am einfachsten (Ömmes, Di, 10. Juli 2018)
Re: Noch besser .... (Na sowas, Di, 10. Juli 2018)
Noch besser .... (klöte, Di, 10. Juli 2018)
Am einfachsten (MaxPerl, Di, 10. Juli 2018)
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten