删除与cpanm安装的perl模块

我是Perl初学者。 我想使用Log :: Log4perl模块,因为我熟悉它如何在Java中工作。 我用cpanm脚本来下载模块,但是我没有运行“sudo”。 然后它将这个模块安装到我的dir / home / amer / perl5。 之后,我将其安装为sudoer,但是我想在我的主目录中删除安装,以避免将来发生任何冲突。 我怎样才能做到这一点? 这是我的cmdline执行堆栈。

感谢致敬!

目前这是相当实验性的,但现在cpanm支持卸载选项。 从MetaCpan :

-U,–uninstall

实验:卸载模块。 将使用.packlist文件从您的库path中删除分发文件。 当与-l或-L一起使用时,只会删除local :: lib目录下的文件。 注意:如果在多个位置(即site_perl和perl库path,perl 5.12或更高版本)中有“dual-life”模块,则只有site_perl中的文件将被删除。 如果发行版包含bin脚本和man,那么在核心安装仍然引用该脚本的情况下,它们将被保留,尽pipe不能保证脚本将继续按照预期的方式使用旧版本的.pm文件。

试试App :: pmuninstall

描述

App :: pmuninstall是一个快速模块卸载程序。 从.packlist中删除文件。

App :: cpanminus和App :: cpanoutdated具有很高的亲和力。

从您的用户帐户转到shell /命令提示符,inputPPM 。 当PPM打开时键入“remove [package name]”,这将为您卸载该特定软件包。 请在PPM中键入“help remove”以获取更多详细信息。

我已经试过App :: pmuninstall,它对我很好。

使用命令安装模块:

$ perl -MCPAN -e shell

terminal不支持AddHistory。

 cpan shell  -  CPAN探索和模块安装(v1.9800)
input'h'寻求帮助。

 cpan [1]>安装App :: pmuninstall

 ...

 CPAN [2]>退出

用法。

在我的本地机器上,它已经安装到/ home / taras / perl5 / bin / pm-uninstall

pm-uninstall [选项]模块…

选项:

     -v, -  verbose打开健谈的输出
     -f, - 强制卸载不提示
     -c, -  checkdeps检查依赖关系(默认为on)
     -n, -  no-checkdeps不检查依赖关系
     -q, - 安静抑制一些消息
     -h, - 帮助这个帮助信息
     -V, - 版本显示版本
     -l, -  local-lib附加模块path
     -L, -  local-lib-contained附加模块path(不包含非核心模块)

模块网站是: https : //metacpan.org/release/App-pmuninstall

我用了大卫·法雷尔的剧本 :

#!/usr/bin/perl # uninstall_perl_module.pl from PerlTricks.com use 5.14.2; use ExtUtils::Installed; use ExtUtils::Packlist; # Exit unless a module name was passed die ("Error: no Module::Name passed as an argument. EG\n\t perl $0 Module::Name\n") unless $#ARGV == 0; my $module = shift @ARGV; my $installed_modules = ExtUtils::Installed->new; # iterate through and try to delete every file associated with the module foreach my $file ($installed_modules->files($module)) { print "removing $file\n"; unlink $file or warn "could not remove $file: $!\n"; } # delete the module packfile my $packfile = $installed_modules->packlist($module)->packlist_file; print "removing $packfile\n"; unlink $packfile or warn "could not remove $packfile: $!\n"; # delete the module directories if they are empty foreach my $dir (sort($installed_modules->directory_tree($module))) { print("removing $dir\n"); rmdir $dir or warn "could not remove $dir: $!\n"; } 

它做了这个工作,虽然它产生了一些可怕的输出:-):

 removing / could not remove /: Device or resource busy removing /home could not remove /home: Permission denied 

你可能也想看看这个post 。