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

Which module do I need when I got error info "Can't locate getopts.pl in @INC..."

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

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

我不确定包管理器如何与 macOS 一起工作,但是安装 getopts 包的平台独立方式。

要回答您作为对@hobbs 的回答的评论提出的问题,我搜索我需要的模块的方式是通过@hobbs link编辑的网站,https://metacpan.org, or, alternatively, http://search.cpan.org .就在那一刻,我找到了我需要的东西。

搜索 getopts.pl 得到 link 到 "Perl4::CoreLibs"。在右上角,有一个 link 表示 Perl4-CoreLibs-0.003.tar.gz (虽然现在看起来是 0.004)。我右键单击并选择 "copy link address",这给了我

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

无论你的 link 是什么,你都需要解压它并找到 lib 目录中的所有 *.pl 文件到一个目录中,或者

1) Link 从命令行发送给他们,例如

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

但还有更简单的方法。

最后,我通过将以下行添加到 ~/.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