Perl5 中的不能使用Switch,报错​Can't locate Switch.pm in @INC

2020年09月10日 · Linux · 技术帮助分享 · 3803次阅读

------正---文------

问题:

运行脚本报错:

Can't locate Switch.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at ./xxxx.pl line 4.



原因:

这是因为 在 Perl 5 中不推荐使用switch-case

原因是:switch-case可能会在代码的其他部分产生语法错误。如果在 heredoc 中存在case,则在 perl 5.10.x 上可能会导致语法错误,一般来说,使用given/when代替。它是在 perl 5.10.0 中引入的,Perl 5.10.0 于 2007 年发布。

解决方法

1.一定要使用,安装Switch模块

Centos:

使用 CPAN 安装Switch模块

打开命令窗口,输入 cpan 命令,然后输入 install Switch 命令:

# cpan
cpan[1]> install Switch           // 安装
cpan[2]> exit                     // 退出


若未安装CPAN,使用Yum安装CPAN

# yum install cpan -y


Ubuntu:

使用 apt-get 安装

sudo apt-get install libswitch-perl


2.改用 given /when


将代码 原来Switch改为given,case改为when


代码开头添加 

use v5.10;


示例:


use v5.10;
given( $ARGV[0] ) {
    when( /fred/i ) { say 'fred在参数内' }
    when( /^Fred/ ) { say '参数的开头是Fred' }
    when( 'Fred'  ) { say '参数就是Fred' }
    default         { say "我没有看见Fred" }
    }

--given会将参数化为$_,每个when条件都尝试用智能匹配对$_进行测试,实际上可以写成如下形式,这样就清楚明白了:


use v5.10;
given( $ARGV[0] ) {
    when( $_ ~~ /fred/i ) { say 'fred在参数内' }
    when( $_ ~~ /^Fred/ ) { say '参数的开头是Fred' }
    when( $_ ~~ 'Fred'  ) { say '参数就是Fred' }
    default               { say "我没有看见Fred" }
    }




------结---束------

『静谧星河』采用《署名-相同方式共享 4.0 国际》进行许可。如需转载请保留本文地址。
本文地址:
https://www.yuvin.cn/Linux/519.html
AD AD

支持我

教程帮助解决方法LinuxCentos脚本编程

静谧星河最后编辑于4年前


因本站不提供交互式服务,评论均需审核后显示,敬请谅解。

添加新评论

captcha

请输入验证码