当我收到错误信息时,我需要哪个模块“无法在@INC中找到getopts.pl ...”

时间:2017-12-27 10:54:55

标签: macos perl cpan getopts cpanm

我在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,但我不知道应该安装哪个模块。

2 个答案:

答案 0 :(得分:3)

这是Perl4::CoreLibs。一般来说,Debian包libthis-that-perl对应于一个名为This::That的模块,尽管由你来计算大小写:)

答案 1 :(得分:2)

我不确定软件包管理器如何使用macOS,而是一种独立于平台的安装getopts软件包的方式。

为了回答你对@hobbs的回答作出评论的问题,我搜索我需要的模块的方式是通过@hobbs链接的网站https://metacpan.org,或者http://search.cpan.org。 3}}。我第二次找到了我需要的东西。

搜索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

无论您的链接是什么,您都需要解压缩并找到*.pl目录中的所有lib个文件到目录中,并且

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

现在,获取tarball

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

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

最后,我这样做,以便每次使用终端时,通过将以下行添加到perl,此目录将成为~/.bashrc搜索路径的一部分 此命令将添加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