2012-09-24 9 views
7

Mir ist klar, dass ich die Shebang-Zeile nur in Skripten einschließen sollte, die wir direkt in der Shell ausführen möchten. Ich sehe auch nicht, dass die Shebang-Zeile in einem der großen Modulpakete enthalten ist, die ich lokal installiert habe.Gibt es jemals einen Grund, die Shebang-Zeile in Perl-Pakete aufzunehmen?

Allerdings war ich immer noch neugierig, ob Leute es aus einem anderen Grund, der mir noch nicht bekannt ist, einbeziehen könnten. Oder wenn es vielleicht so etwas wie einen "historischen" Grund für die Aufnahme gibt. Oder sollte die Shebang-Linie nie in .pm-Dateien (Periode) enthalten sein, aus Angst, dass mein Haus explodiert?

+0

Die einzige Verwendung, die ich denken kann, ist, dass jemand Leute aber einige Tests in Modulen, die durch Ausführen des Moduls als Skript ausgeführt werden. – ikegami

Antwort

7

Nein. Ein Shebang markiert eine Datei als ausführbar, und ein Modul ist normalerweise nicht ausführbar.

Im Allgemeinen gibt es Ausnahmen. Python hat ein Idiom, um zu erkennen, ob die aktuelle Datei die vom Interpreter aufgerufene Datei ist, und einige Module verwenden dies, um ihre Komponententests auszuführen, wenn sie eigenständig aufgerufen werden. Dies ist in der Perl-Community nicht üblich, wo Sie zusätzliche Komponententestdateien mit dem Modul auf CPAN gebündelt haben.

Also auch mit dieser möglichen Ausnahme würde ich es nicht als guten Stil betrachten, einen Shebang in eine Moduldatei aufzunehmen, die nicht direkt ausgeführt werden soll.

+1

Es gibt Ausnahmen. Zum Beispiel [App :: Module :: Lister] (https://metacpan.org/module/App::Module::Lister). –

4

Die kurze Antwort ist NEIN, aber es gibt keine richtige oder falsche Antwort.

Der Zweck des Shebang ist es, das Betriebssystem wissen zu lassen, wo der Interpreter ist. Es ist nicht erforderlich, sie einer Perl-Datei (Skript oder Modul) hinzuzufügen. Und unter Windows wird es sowieso ignoriert **.

Genauer gesagt gibt es in den meisten Fällen keinen Grund, sie zu einem Modul hinzuzufügen, es sei denn, es gibt einen Grund, warum Sie dieses Modul direkt ausführen möchten. Ein Perl-Modul ist sowieso nur ein Perl-Skript, mit einem 'Paket' Befehl an der Spitze.

Wie auch immer, es wird nicht schaden, wenn es da ist, aber in den meisten Fällen macht es keinen Sinn.

** Unabhängig davon, wie Perl gestartet wird, wird immer der Shebang für Befehlszeilenschalter betrachtet. Dies gilt sogar für Windows, wo das Betriebssystem nicht nach der Shebang-Zeile sucht, aber wenn Perl die Datei scannt, wird es dies tun. Siehe http://perldoc.perl.org/perlrun.html.

+0

Gibt es irgendwelche Probleme, wenn ein Modul eine Shebang-Linie hat, die auf die falsche Stelle zeigt, z. nicht existierende oder falsche Version des Perl-Interpreters? Wenn ja, wäre das ein weiterer Grund, dies nicht zu tun. –

+0

Eine ungültige Shebang-Zeile führt zu einem Fehler 'Interpreter nicht gefunden', wenn Sie versuchen, sie auszuführen. – tripleee

+0

@Stuart R. Jefferys, Keine Probleme. Wenn Sie nicht versuchen, das Modul auszuführen, wird der Shabang ignoriert. – ikegami

Verwandte Themen