Perl笔记:Perl语言入门(第六版) - 切片、捕获错误

切片

列表切片

my $mtime = (stat $some_file)[9]; #圆括号不能省略

my ($card_num, $count) = (split /:/)[1, 5]; #一次取出多个值,下标可以使用负值,顺序可以是任意的,可以重复。

数组切片

数组切片的圆括号可以省略

my @numbers = @names[ 9, 0, 2, 1, 0];

切片可以直接内插到字符串中。

哈希切片

my @three_scores = @score{ qw/ barney fred dino/ };

捕获错误

eval

捕获代码运行时,可能出现的严重错误。 eval { $barney = $fred / $dino }; #结尾有分号,eval是表达式。

eval的返回值就是语句块中最后一条表达式的执行结果。

上述变形后的写法:

my $barney = eval { $fred / $dino };

$barney变量位于eval外部,便于后续处理。

捕获到错误时,返回undef,故可用定义或操作符对变量设定默认值。返回的错误消息在$@中。

如果测试的部分没有有意义的返回值,需要构造有返回值的代码块

unless ( eval { some_sub(); 1} ) { #出现错误最后一句代码不会执行。

print "I couldn't divide by \$dino: $@ if $@;

}

列表上下文,eval捕获错误,返回空列表。

eval块也可以设定词法变量的作用域,并且块内的语句数目不限。

eval可以嵌套。

grep筛选列表

my @odd_numbers = grep { $_ % 2 } 1..1000; #第一个参数是代码块(如正则表达式),以$_为列表元素返回布尔值,第二个参数为待筛选的列表。

map对列表元素变形

my @format_data = map { &big_money($_) } @data;

参数和grep类似,但代码块返回的是实际的计算结果,最终返回一系列被处理的结果。而且map的表达式在列表上下文中求值,可以返回多个元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值