运行脚本报错:
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 年发布。
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
将代码 原来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" } }