Come controllare la disponibilità di Perl, la sua versione e la presenza di un modulo di richiesta?

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

  •  25-09-2019
  •  | 
  •  

Domanda

Ho scritto uno script in Perl, voglio solo dare a tutti, per questo ho pensato di scrivere uno script bash che viene utilizzato per testare l'ambiente di un utente e scoprire se l'ambiente è in grado di eseguire lo script Perl.

Voglio testare le cose come:

  1. Se Perl è installato in tale sistema
  2. Perl dovrebbe avere la versione 5 o più
  3. Se il modulo di JSON :: Qualsiasi è disponibile

Ogni suggerimento sarebbe molto apprezzato: -)

È stato utile?

Soluzione

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

Io uso spesso '${PERL:-perl}' e costrutti simili per identificare il comando (per awk vs nawk o gawk; troff vs groff; ecc).

Se si desidera verificare la versione di JSON :: Qualsiasi, catturare l'output del comando, invece. Se si desidera verificare la versione di Perl, aggiungere 'use 5.008009;' o qualunque sia il numero che si pensa è ragionevole. (Non è stato tanto tempo fa, che finalmente rimossi Perl 4 da uno dei NFS montati i file system sul lavoro - ma non era l'unico Perl sulla macchina - almeno, non negli ultimi dieci anni o più!)

Altri suggerimenti

No, non scrivere uno script di shell. Perl ha già un modo perfettamente bene di fare questo. Il modo corretto per farlo è quello di costruire una distribuzione CPAN-ready utilizzando la toolchain normale. Alcune di queste è spiegato in perlnewmod , perlmodstyle e perlmodinstall .

Per un esempio funzionante di dimensioni minimali, creare un layout directory in tal modo:

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

Nel file Build.PL, messo:

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;

Modificare i dettagli ideale per la tua scopi.

Nel file README, mettere alcune istruzioni per l'installazione, per esempio:

To install this module, run the following commands:

perl Build.PL
./Build install

Una volta che hai finito con tutto questo, si esegue:

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

Questo si tradurrà in un archivio .tar.gz che verranno distribuite. Dì ai tuoi utenti di installare come qualsiasi altro modulo CPAN, o se non sanno che cosa significa, dovrebbero leggere il file README.

Se avete tempo, vi consiglio convertire lo script a un modulo. Il programma pl2pm (viene fornito con Perl) e il modulo CPAN Module-Starter-PBP aiuto.

Se i permessi di licenza, è possibile caricare il tuo codice per CPAN per rendere ancora più conveniente per gli utenti. Chiedi aiuto a uno dei seguenti primi posti: mailing list module-authors@perl.org , web forum PerlMonks , canale IRC #toolchain il magnete (IRC: //irc.perl.org/toolchain)

Per quanto riguarda la verifica la disponibilità Perl il modo più semplice per farlo è quello di verificare il codice di ritorno (codice di uscita) del comando perl -v, se questo non è 0, non c'è bisogno di Perl.

Ora per quanto riguarda i requisiti Perl, è dovrebbe accordo con loro da dentro lo script Perl:

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

È possibile che questo codice Perl possa funzionare solo con Perl 5.6.1 o più recente e con modele "ModuleName" versione 2.0 o più recente. Non v'è alcuna necessità di controllare manualmente la versione di Perl da bash, è meglio e più facile da farlo direttamente dallo script Perl.

References:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top