1

我在我的 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 中,可以通过遵循此答案来解决此类问题

有没有像libperl4-corelibs-perlmacOS 一样的模块?

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

4

2 回答 2

3

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

于 2017-12-27T11:16:50.513 回答
2

我不确定包管理器如何与 macOS 一起使用,而是一种与平台无关的安装getopts包的方式。

要回答您作为对@hobbs 答案的评论提出的问题,我搜索我需要的模块的方式是通过@hobbs 链接的站点https://metacpan.orghttp://metacpan.org /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

无论您的链接是什么,您都需要解压它并将目录*.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

现在,获取压缩包

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每次使用终端时搜索路径的一部分。不同风格的 Linux 有不同的语法来添加环境变量,一定要找出你的语法!~/.bashrcPERLLIB

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
于 2018-05-12T01:21:19.977 回答