【问题标题】: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,但我不知道应该安装哪个模块。

【问题讨论】:

    标签: macos perl cpan getopts cpanm


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 2017-02-07
      • 2011-01-17
      • 2016-04-15
      • 1970-01-01
      • 2016-12-14
      • 2015-03-19
      相关资源
      最近更新 更多