《中级perl》笔记 - 1, 热身运动

《中级perl》笔记 - 1, 热身运动,第1张

概述《中级perl》主要讲引用、复杂数据结构、面向对象以及如何写出中等规模的perl程序,另外还介绍了很多关于构件模块的内容。进入《中级perl》之前,先巩固一下必要的预备知识。 注:基础perl知识请参考《perl语言入门》,我的头一个perl系列笔记也有详细的内容(英文版 :) ** 列表 *** 作 最常用的列表 *** 作符:print sort reserve print ‘Two castaways ar

《中级perl主要讲引用、复杂数据结构、面向对象以及如何写出中等规模的perl程序,另外还介绍了很多关于构件模块的内容。进入《中级perl》之前,先巩固一下必要的预备知识。

注:基础perl知识请参考《perl语言入门》,我的头一个perl系列笔记也有详细的内容(英文版 :)


** 列表 *** 作

最常用的列表 *** 作符:print sort reserve

print ‘Two castaways are ‘,‘Gilligan’,‘ and ‘,‘Skipper’,“\n”;

my @castaways = sort qw(Gilligan Skipper Ginger ProfessorMary-Ann);

my @castaways = reverse @castaways;

一句话概括,print打印它的参数列表到输出(屏幕或者文件等输出系统),sort对它的参数列表进行排序,reverse 对它的参数列表进行逆序排列。


** grep列表 *** 作

my @lunch_choices = grep &is_edible($_),@gilligans_posessions;

my @results = grep EXPR,@input_List;

my $count= grepEXPR,@input_List;

grep 依次取@input_List的元素,EXPR对元素$_进行标量测试,返回所有为真的元素列表。如果把列表赋值给标量,标量值为返回列表的元素个数(上面最后一例$count)。

my @input_numbers = (1,2,4,8,16,32,64);

my @bigger_than_10 = grep $_ > 10,@input_numbers;# 得到列表(16,64)

my @end_in_4 = grep /4$/,@input_numbers;# 得到列表(4,64)

my @odd_digit_sum = grep digit_sum_is_odd($_),@input_numbers;# 得到列表(1,32)

sub digit_sum_is_odd {

my$input = shift;

my@digits = split //,$input;#假定所有字符都是数字

my $sum

$sum += $_ for @digits;

return$sum % 2;

}

以上三个grep依次分别取@input_numbers所有元素中,大于10的、以4结尾的、数字之和为奇数的元素列表。可以不用函数,而直接用裸块来处理:

my @odd_digit_sum = grep {

my$sum;

$sum +=$_ for split //;

$sum %2;

} @input_numbers;

和之前的grep相比,这里有几个重要的变化:

1、{}后没有逗号

2、没有return语句,因为它不是一个函数

3、因为不是函数,所以直接处理$_,而不需要shift进行参数处理


**map列表 *** 作

mapgrep的 *** 作方式非常类似,不同的是grep表达式以标量判断的方式对$_进行处理,返回的是参数列表的一部份(判断为真的元素列表);而map表达式以mapPing方式对$_进行处理,mapPing可以是任意能想到的处理。

my @input_numbers = (1,64);

my @result = map $_ + 100,@input_numbers;

my @result = map { $_,3 * $_ } @input_numbers;

上面第一个$result得到(101,102,104,108,116,132,164)第二个$result得到(1,3,6,12,24,48,96,64,192),结果竟然比原列表元素还多!

甚至还可以把结果赋值给哈希:

my %hash = @result;#(1=>3,2=>6,4=>12,8=>24,16=>48,32=>96,64=>192)

my %hash = map { $_,3 * $_ } @input_numbers;#一步到位


** eval捕捉致命错误

my $average = $total / $count;# 除数为0可能导致程序崩溃!

Print “okay\n” unless /$match/;# 可能非法的正则?

&implement($_) foreach @rescue_schme;# 死于函数内部?

my $average = eval { $total / $count };

上例如果除数为零,eval返回undef,程序不会崩溃。

总结

以上是内存溢出为你收集整理的《中级perl》笔记 - 1, 热身运动全部内容,希望文章能够帮你解决《中级perl》笔记 - 1, 热身运动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1281132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存