http://qs1969.pair.com?node_id=203128
Category: Utility Scripts
Author/Contact Info doug at nextdimensioninc dot com
Description:

I put together this code to help migrating Perl scripts from one environment to another. The scripts are mostly CGIs, and I found it annoying and time consuming to either

  1. run the scripts to see what breaks
  2. or
  3. read through each script manually
. Using this little script you can check whether all needed modules are available.

Comments and suggestions are appreciated as always...

Update: Changed the logic in my if statement to reflect podmaster's CB suggestion...

#!/usr/bin/perl
use warnings;
use strict;

my $filename=shift || &help; # command line argument is perl script to
+ evaluate
my @modules;  # array of 'use' statements from code we are checking

open (IN,$filename) or die "couldn't open $filename for processing: $!
+\n";

while (<IN>)
{
        chomp;
        if ((/^use/) and not (/strict/ || /warnings/))
        {
                push @modules,$_;
        }
}
close IN;
for my $code (@modules)
{
        my (undef,$library)=split(/ /,$code);   # get the module name
        $library=~s/;//;                        # clean up the name
        eval $code;
        if ($@)
        {
                warn "couldn't load $library: $@","\n";
        }
        else
        {
                print "$library looks ok\n";
        };
}
sub help
{
        print <<"END";

check_perl_modules.pl

This script finds all the "use" statements loading modules in the targ
+et perl
file (specified as a command line argument) and attempts to load them.
If there are problems loading the module, the error mesage returned is
+ printed.

END
        exit;
}