=item is_module_installed Tries to guess whether a module is installed (yet) or not. =cut sub is_module_installed { my $module_name = shift; my $mod = $module_name; $mod =~ s/-([\d\.]+\d).*$//; my $min_ver = $1; (my $mod_name = $mod) =~ s/-/::/g; $mod =~ s/(?:-|::)/\//g; $mod .= '.pm'; eval { require $mod; 1} or return 0; if ($min_ver or scalar @_) { $min_ver ||= shift; $min_ver = normalise_version($min_ver); my $mod_ver = do { no strict 'refs'; normalise_version(${"${mod_name}::VERSION"}); }; if ($mod_ver and $mod_ver lt $min_ver) { return 0; } } 1 } sub normalise_version { my $version = shift; my @subs; if ($version =~ /\./) { @subs = split /\./, $version; } else { @subs = map { ord } split //, $version; } join '.', sprintf(join('', ("%03d")x@subs), @subs); } #### my @tarballs = grep { not is_module_installed($_); } glob '*.tar*';