如何撤销意外安装的所有Perl模块?

我试图通过CPAN升级我的Perl模块,但是我没有提供一个正则表达式/模块名称来进行升级:perl -MCPAN -e 'upgrade';我只能假设最糟糕的情况(这似乎得到了perldoc perllocal的输出支持),即所有来自CPAN的Perl模块都被安装了。
我该如何解决这个问题?我想我可以删除/usr/local/share/perl,但这会有什么影响呢?
编辑:我硬盘上还有95%的可用空间,所以这不是一个很大的问题。我只是不想有太多不必要的杂乱文件。我正在考虑删除那个目录,执行dpkg --purge perl,然后重新进行apt-get和CPAN安装过程。但这真的有必要吗,还是我只需要从/usr/local/share/perl中删除不必要的模块就可以了?

有些人觉得直接删除系统文件(和文件夹)不是一个好主意。最好使用像apt-get或Synaptic这样的工具,让系统彻底删除并更新必要的数据库。 - user25656
4@vasa1 CPAN安装的Perl模块不是使用这种方式进行跟踪的。可能需要删除模块所在的目录。或者必须通过CPAN手动删除它们,但不确定是否会遵循卸载指令,甚至是make uninstall命令。不幸的是,这是一个完全不同的软件包管理系统。http://stackoverflow.com/questions/2626449/how-can-i-de-install-a-perl-module-installed-via-cpan - Kevin Bowen
@maggotbrain,谢谢!我不知道这一点。(我只是用来做小事情的Perl是随操作系统附带的。) - user25656
2个回答

仔细观察后,我认为您无需或不应删除系统中的任何目录或文件。
从命令行运行命令perl -MCPAN -e 'upgrade'不会向您的系统安装额外的模块。
它只会尝试通过CPAN软件包管理系统升级已安装的模块,并不涉及Synaptic。
这类似于在cpan[1]>提示符下运行'r'命令,然后再运行升级命令。请参考这里
CPAN和Synaptic是两个独立且不同的软件包管理系统。
此操作不会安装来自CPAN的所有可能的Perl模块,也不会修改现有的系统软件包数据库。因此,您可以安全地撤消此操作。
但是,如果某个应用程序或您的系统依赖于特定版本的Perl模块,仍存在潜在的风险。
如果您中断了升级过程,很有可能您已经成功避免了对系统的损害。
恢复选项:
从命令行启动并运行r命令以查看安装模块和可用的升级。例如,这是我的简略输出:
cpan[7]> r

Package namespace         installed    latest  in CPAN file
App::Cpan                    1.5701      1.61  BDFOY/App-Cpan-1.61.tar.gz
DBD::mysql                    4.020     4.022  CAPTTOFU/DBD-mysql-4.022.tar.gz
DBI                           1.616     1.623  TIMB/DBI-1.623.tar.gz
DB_File                       1.821     1.827  PMQS/DB_File-1.827.tar.gz
Error                       0.17010   0.17019  SHLOMIF/Error-0.17019.tar.gz
Eval::Closure                  0.06      0.08  DOY/Eval-Closure-0.08.tar.gz
....

Eval::Closure模块作为例子。假设你让perl -MCPAN -e 'upgrade'命令完成了,并且现在安装了0.08版本。
从Synaptic上看,在这种情况下,它将显示仓库中的最新版本仍然是0.06(具体而言,在我的实例中是0.06-1)。
你可以通过运行以下命令回滚到系统版本: sudo apt-get install --reinstall libeval-closure-perl 如果你手动安装了任何Perl模块,并希望将它们回滚到先前的版本,你需要再次下载它们(可以从source.cpan.org或其他地方),并手动重新安装它们。
总结一下:在CPAN中升级Perl模块不会影响你的系统仓库。 祝你好运。不要慌张。

非常出色而全面的回答!"不要慌张"是关键词。我看到了很多输出并阅读了关于使用参数来指定模块的内容,所以我过于草率地得出了结论。我确实惊讶地发现我几乎没有使用任何硬盘空间,但我仍然看到了一些我不认识的模块(可能是因为依赖关系)。很高兴知道这对我来说不需要任何工作! - paulrehkugler

我建议执行以下操作:apt-get remove <已安装的软件包> && apt-get autoremove(用于删除依赖项)&& apt-get purge <已安装的软件包>(用于删除剩余的配置文件),然后您可以删除不需要的文件夹,但这应该已经为您完成了 :)

2OP通过CPAN完成了这个操作。清除缓存不会有帮助,因为这些模块不受软件包管理的控制。 - Kevin Bowen