Warum funktioniert das Folgende in einer Datei nicht?Warum kann "lib '~';" in einer Perl-Datei verwendet werden?
use lib '~';
Warum funktioniert das Folgende in einer Datei nicht?Warum kann "lib '~';" in einer Perl-Datei verwendet werden?
use lib '~';
Dies wird das Verzeichnis ~
in Ihrer Bibliothek Suchpfad genannt sind.
Wenn Sie ~
erwartet /home/CJ7
zu erweitern, dann wird dies nicht funktioniert, weil es die Kommando-Shell (wie bash) macht die Interpolation für Dinge wie export PATH=~/bin:$PATH
und die Schale ist hier nicht beteiligt ist.
Perl weiß einfach nichts über ~
, das ist eine shell feature. Wenn Sie es mit lib aufrufen, wird pragma ein Verzeichnis mit einem Literalnamen '~'
in @INC (im aktuellen Verzeichnis) enthalten, da dies geschieht at BEGIN, wie alle use tun. Fehler treten erst später auf, wenn das Skript versucht, aus Modulen zu importieren, von denen erwartet wird, dass sie dort sind. (Es sei denn, ein Verzeichnis mit einem solchen Namen existiert tatsächlich, mit Modulen darin.) So kann es schwieriger sein zu diagnostizieren.
Sie können das gleiche mit dem %ENV
Hash erreichen.
use lib "$ENV{HOME}/path_from_HOME/";
Für diese Umwelt braucht eine richtig HOME
eingerichtet haben, aber dies in Ordnung sein sollte.