Miałem nadzieję Module::ScanDeps który dostarcza narzędzia wiersza polecenia scandeps.pl byłyby użyteczne tutaj, ale, ku mojemu przerażeniu, Module::ScanDeps
najwyraźniej nie przeznaczony do tego konkretnego celu, jak scandeps.pl
albo ignoruje brakujących modułów lub (z -c
lub -x
) croaks gdy skrypt używa modułu, który nie jest zainstalowany.
Oto quick'n'dirty Perl skrypt, który próbuje wykonać skrypt za pomocą do aż do skutku:
#!/usr/bin/perl
use strict;
use warnings;
use Term::Prompt;
my ($script) = @ARGV;
die "Provide script file name on the command line\n"
unless defined $script;
until (do $script) {
my $ex = [email protected];
if (my ($file) = $ex =~ /^Can't locate (.+?) in/) {
my $module = $file;
$module =~ s/\.(\w+)$//;
$module = join('::', split '/', $module);
print "Attempting to install '$module' via cpan\n";
system(cpan => $module);
last unless prompt(y => 'Try Again?', '', 'n');
}
else {
die $ex;
}
}
Jeśli nie chcesz skrypt do uruchomienia, można uruchomić perl -c $script
, przechwytywanie stderr
dane wyjściowe tego i analizowanie dla brakujących wiadomości modułu i wywołanie cpan
dla każdego takiego modułu znalezionego do perl -c $script
wyświetla "Składnia OK". To daje ci również czystszą pętlę. Przyjrzę się temu później.
Można pominąć zależności załadowane w czasie wykonywania przy użyciu tej techniki.
Wygląda obiecująco – Nifle