当我收到错误信息“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...”时,我需要哪个模块的主要内容,如果未能解决你的问题,请参考以下文章
我从 Play 管理中心收到以下错误,我无法编辑版本或 Google 播放信息 [重复]
我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令