当我收到错误信息“Can't locate getopts.pl in @INC...”时,我需要哪个模块

Posted

技术标签:

【中文标题】当我收到错误信息“Can\'t locate getopts.pl in @INC...”时,我需要哪个模块【英文标题】:Which module do I need when I got error info "Can't locate getopts.pl in @INC..."当我收到错误信息“Can't locate getopts.pl in @INC...”时,我需要哪个模块 【发布时间】:2018-06-08 00:34:14 【问题描述】:

我在我的 macOS 中运行此命令

$ perl ~/Desktop/blif2cnf.pl

并得到此错误信息:

Can't locate getopts.pl in @INC (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /Users/Frank/Desktop/blif2cnf.pl line 10.

在我的linux 16.04,这个问题可以通过关注this answer来解决

macOS 中是否有类似libperl4-corelibs-perl 的模块?

我知道 CPAN,但我不知道应该安装哪个模块。

【问题讨论】:

【参考方案1】:

它是Perl4::CoreLibs。一般来说,Debian 软件包 libthis-that-perl 对应于一个名为 This::That 的模块,尽管大小写取决于您:)

【讨论】:

是否有任何文档站点可以搜索我需要的模块? @sirius,您可以在下面的答案中找到详细信息,但快速版本是:http://search.cpan.org 或 https://metacpan.org。【参考方案2】:

我不确定包管理器如何与 macOS 配合使用,但它是一种独立于平台的安装 getopts 包的方式。

要回答您作为对@hobbs 答案的评论提出的问题,我搜索所需模块的方式是通过@hobbs 链接的站点https://metacpan.org 或http://search.cpan.org。正是在这一秒,我找到了我需要的东西。

搜索getopts.pl 给出了“Perl4::CoreLibs”的链接。在右上角,有一个链接说 Perl4-CoreLibs-0.003.tar.gz(虽然现在看起来有 0.004)。我右键单击并选择“复制链接地址”,这给了我

http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.004.tar.gz

无论你的链接是什么,你都需要解压它并将lib目录中的所有*.pl文件找到一个目录,然后

1) 从命令行链接到它们,例如

perl -I /path/to/where/you/untarred/lib ~/Desktop/blif2cnf.pl

2) 将它们添加到您的 PERLLIB 环境变量中。

我认为更多细节会有所帮助。


详细说明

找出您要下载*.pl 文件的目录。我用$HOME/new_perl_stuff

cd ~

mkdir new_perl_stuff

cd new_perl_stuff

现在,获取压缩包

wget http://search.cpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.004.tar.gz

解压,进入目录,确保有lib

$ tar -xzf Perl4-CoreLibs-0.004.tar.gz

$ cd Perl4-CoreLibs-0.004

$ ls

您应该会在列表中看到lib

可以将新下载的lib 目录(在我的情况下为$HOME/new_perl_stuff/Perl4-CoreLibs-0.004/lib)添加到perl 搜索路径,但这只是让我担心我可能会在某个时候删除另一个目录。我在/usr/lib 目录中创建了一个新文件夹。我决定将新目录命名为libperl4-corelibs-perl,因为这看起来很标准。首先,我检查以确保不存在具有该名称的目录。

$ stat /usr/lib/libperl4-corelibs-perl
stat: cannot stat '/usr/lib/libperl4-corelibs-perl': No such file or directory

然后我制作了目录。

mkdir /usr/lib/libperl4-corelibs-perl

下一步是将所有*.pl 文件复制到此目录中。我希望稍后解释下一个命令。我以这种方式运行它以确保我需要的所有文件都在那里。从我的$HOME/new_perl_stuff/Perl4-CoreLibs-0.004 目录中,我运行了以下命令,我打算回来解释一下。

find ./lib -type f -name "*.pl" -print0 | xargs -I'' -0 \
bash -c 'new_dir=/usr/lib/libperl4-corelibs-perl/; chmod +x ; \
echo "Moving "; mv  $new_dir && echo -e "success\n" || \
echo -e "failure\n"' | tee moving_day.log

如果您想看到所有内容都已成功复制,请运行该命令。执行所有必要操作的较短命令是:

find ./lib -type f -name "*.pl" -print0 | xargs -I'' -0 \
bash -c 'new_dir=/usr/lib/libperl4-corelibs-perl/; chmod +x ; \
mv  $new_dir'  

跑步也不错

ls -lah /usr/lib/libperl4-corelibs-perl

检查*.pl 文件是否存在。

你现在可以运行

perl -I /usr/lib/libperl4-corelibs-perl ~/Desktop/blif2cnf.pl

但是有一个更简单的方法。

最后,我通过在我的~/.bashrc 中添加以下行,使每次使用终端时该目录都将成为perl 搜索路径的一部分 此命令将路径添加到 PERLLIB 环境变量。不同风格的 Linux 有不同的语法来添加环境变量,一定要找出你的!

export PERLLIB="/usr/bin/libperl4-corelibs-perl:$PERLLIB"

我为此运行的命令是

$ echo -e "\n\n## allow Perl to use the files in Perl4::CoreLibs" >> $HOME/.bashrc

$ echo -e "export PERLLIB=\"/usr/lib/libperl4_corelibs_perl:$PERLLIB\"" >> $HOME/.bashrc

$ source .bashrc

现在,您可以简单地运行

perl ~/Desktop/blif2cnf.pl

注意:返回并删除不需要的额外内容可能是个好主意:

rm -rf $HOME/new_perl_stuff

【讨论】:

以上是关于当我收到错误信息“Can't locate getopts.pl in @INC...”时,我需要哪个模块的主要内容,如果未能解决你的问题,请参考以下文章

错误:此XML文件似乎没有与之关联的任何样式信息

我从 Play 管理中心收到以下错误,我无法编辑版本或 Google 播放信息 [重复]

我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令

我收到 Laravel Mysql 连接错误

在 Kotlin 中无法“findViewById”。收到错误“类型推断失败”

为啥我尝试打开 URL 时收到 403 错误