ich Module::ScanDeps hatte gehofft, dass die scandeps.pl das Kommandozeilenprogramm bietet hier wäre nützlich, aber zu meinem Entsetzen, ist Module::ScanDeps
offenbar nicht für diesen speziellen Zweck als scandeps.pl
soll entweder ignoriert fehlende Module oder (mit -c
oder -x
) krächzt, wenn die Skript verwendet ein Modul, das nicht installiert ist.
Hier ist ein quick'n'dirty Perl-Skript, das das Skript mit do auszuführen versucht, bis es gelingt:
#!/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;
}
}
Wenn Sie werden nicht laufen das Skript möchten, können Sie perl -c $script
ausführen können, zu erfassen stderr
Ausgabe von diesem und parsen für fehlende Modul Nachrichten und Anruf cpan
für jedes solche Modul gefunden, bis perl -c $script
Ausgänge "Syntax OK". Das gibt dir auch eine sauberere Schleife. Ich werde mir das später ansehen.
Sie können Abhängigkeiten, die zur Laufzeit mit dieser Technik geladen werden, übersehen.
Sieht vielversprechend aus – Nifle