perl map 和grep

本文深入解析Perl中的grep与map函数用法,包括语法细节、代码块与正则表达式的应用,以及如何利用这些函数进行数据筛选与转换,如挑选奇数、求平方、文件内容搜索等实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

grep语法:

map BLOCK LIST # BLOCK 由{}标志, 需要注意这里没有逗号
map EXPR,LIST   # EXPR 通常是正则表达式,需要注意不要忽略这里的逗号

解释:
grep 的第一个参数是代码块, 第二个参数是列表
代码块: $_会轮流成为列表中每个元素的别名,并且根据代码块的返回结果对列表进行筛选。

应用一 :从一大堆数字中挑出奇数:

my @odd_numbers = grep { $_ % 2 } 1..1000;

应用二: 从一个文件中取出包含‘fred’的行
方式一:

open FH, "<", 'filename.txt'  #打开文件
my @matching_lines = grep { /\bfred\b/i } FH; #搜索

方式二:

open FH, "<", 'filename.txt'  #打开文件
my @matching_lines = grep /\bfred\b/i ,FH; #搜索

应用三: 求列表中的值的平方:

my @numbers = grep { $_ = $_ *  $_ } 1..10;

map语法:

map BLOCK LIST   # 需要注意的是 map的第二个参数还是列表!!!
map EXPR,LIST     # 需要注意的是 map的第二个参数还是列表!!!

解释:
第一个参数可以是代码块或者正则表达式,第二个参数是列表
工作方式和grep相似,都是将$_设成列表每个元素的别名并且逐个为它们执行代码块。但是map使用代码块的最后一个表达式的方式和grep不同,它返回的不是逻辑的真假值,而是该表达是的实际计算结果,最终返回的一系列这样的结果组成的列表。

应用一: 求平方

my @squares = map { $_ * $_ } 1..10;

应用二: 转变列表成哈希

my %squares = map { $_ => $_ * $_ } 1..10;

应用三:移除小于等于5的数组元素,对大于5的元素求平方

my @squares = map { $_ > 5 ? ( $_ * $_ ) : () } 1..10;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值