Wie Verfügbarkeit von Perl, seine Version und das Vorhandensein eines erforderlichen Modul zu überprüfen?

StackOverflow https://stackoverflow.com/questions/2605545

  •  25-09-2019
  •  | 
  •  

Frage

Ich habe einen Perl-Skript geschrieben, ich möchte nur, um sich zu jedem, für das ich geplant einen Bash-Skript zu schreiben, die die Umgebung eines Benutzers zu testen und festzustellen, ob die Umgebung für den Betrieb des Perl-Skript kann.

Ich will die Dinge testen, wie:

  1. Ob Perl hat in diesem System installiert
  2. sollte Perl hat die Version 5 oder mehr
  3. Ob das Modul JSON :: Jeder ist verfügbar

würde Jeder Vorschlag sehr geschätzt: -)

War es hilfreich?

Lösung

if perl -MJSON::Any -e 'print "$JSON::Any::VERSION\n"' >/dev/null 2>&1
then : OK
else echo "Cannot find a perl with JSON::Any installed" 1>&2
     exit 1
fi

ich oft verwenden '${PERL:-perl}' und ähnliche Konstrukte den Befehl zu identifizieren (für awk vs nawk oder gawk; troff vs groff; usw.).

Wenn Sie die Version von JSON :: Jeder, erfassen die Ausgabe des Befehls statt testen möchten. Wenn Sie die Version von Perl testen möchten, fügen Sie ‚use 5.008009;‘ oder was auch immer Zahl denken Sie sinnvoll ist. (Es war nicht so lange her, dass sie endlich Perl 4 entfernt von einem der NFS-Dateisysteme bei der Arbeit - aber das war nicht die einzige Perl an der Maschine - zumindest nicht in den letzten zehn Jahren oder mehr!)

Andere Tipps

Nein, nicht schreiben, einen Shell-Skript. Perl hat bereits eine völlig in Ordnung, Art und Weise, dies zu tun. Der richtige Weg, dies zu tun, ist eine CPAN-ready Verteilung baut die normale Werkzeugkette verwenden. Ein Teil davon wird erklärt in perlnewmod , perlmodstyle und perlmodinstall .

Für ein minimales Arbeits Beispiel einer Verzeichnisstruktur erstellen also:

.
├── Build.PL
├── README
└── script
    └── abuscript.pl

In der Build.PL Datei setzen:

use 5.000;
use Module::Build qw();
Module::Build->new(
    module_name        => 'abuscript',
    dist_version       => '1.000',
    dist_author        => 'abubacker <abubacker@example.com>',
    dist_abstract      => 'describe what the script does in one sentence',
    configure_requires => {
        'perl' => '5.000',
    },
    requires           => {
        'JSON::Any' => 0,
    },
)->create_build_script;

Ändern Sie die Details Ihre Zwecke Hotel.

In der README Datei, setzte einige Installationsanweisungen, zum Beispiel:

To install this module, run the following commands:

perl Build.PL
./Build install

Wenn Sie mit allen fertig sind, die, Sie laufen:

perl Build.PL
./Build manifest
./Build dist

Dies wird in einem .tar.gz Archiv führen, die Sie verteilen. Lassen Sie Ihre Benutzer es wie jedes andere CPAN-Modul zu installieren, oder wenn sie nicht wissen, was das bedeutet, sie sollten die Readme lesen.

Wenn Sie Zeit haben, empfehle ich das Skript zu einem Modul zu konvertieren. Das Programm pl2pm (kommt mit Perl) und dem CPAN-Modul Modul-Starter-PBP helfen Ihnen.

Wenn Lizenz zulässt, ist es möglich, Ihren Code zu CPAN hochzuladen noch bequemer für die Benutzer zu machen. Bitten Sie um Hilfe in einem der folgenden Orte zuerst: Mailingliste module-authors@perl.org , Webforum PerlMonks , IRC-Kanal #toolchain auf MAGNET (irc: //irc.perl.org/toolchain)

Im Hinblick auf die Überprüfung Perl Verfügbarkeit der einfachste Weg, es zu tun ist, den Return-Code zu überprüfen (Exit-Code) des Befehls perl -v, falls dies nicht 0 ist, müssen Sie Perl nicht haben.

Jetzt Anforderungen Perl in Bezug auf Sie sollte Deal mit ihnen aus Ihrem Perl-Skript:

#!/usr/bin/env perl
use 5.006_001;
use ModuleName 2.0;

Der obige Code Perl nur mit Perl 5.6.1 oder neuer und mit modele „Module“ Version 2.0 oder höher ausgeführt werden. Es besteht keine Notwendigkeit, manuell die Perl-Version überprüft von bash, ist es besser und einfacher ist es, aus dem Perl-Skript direkt zu tun.

Referenzen:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top