perl map,grep正则语句

@words=map{($v)=/(\w+)/;$v}grep{/$key/}<DATA>;请问map这句怎么理解?先运行的map还是先grep?可以互换么?... @words = map { ($v) = /(\w+)/; $v }
grep { /$key/ } <DATA>;

请问map这句怎么理解? 先运行的map还是先grep?可以互换么?
展开
 我来答
百度网友5d7ad46
2012-08-27 · 超过19用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:27.5万
展开全部
先运行grep从DATA文件句柄中读取内容,再传给map,那就是个匹配,最后才存到@words中
追问
问题1,为什么那个匹配要重新赋值给V??
问题2,为什么grep和map的顺序调换就不对??
追答
1、你没有搞懂grep和map在perl中的用法,grep是对列表进行筛选,map是对列表进行转换,一个是挑选作用,只保留了需要的。而map,是对列表中的元素进行了修改。
2、你的这个程序,grep操作从文件列表中筛选出能匹配上$key的行。
然后传给map,先存到$v中,再进行对$v进行正则匹配,提出这一行的中的单词,当然这个单词是[A-Za-z0-9_],而不单纯是我们所说的英文单词
提出的的单词再传回到$v中,这里相当于再进行了一次赋值。(\w+)进行了变量捕获,也是就捕获了一行(一个长字串)中的单词,再赋值给了$v,这里$v的值就改变了,不再是原来的行了。这个单词再存进了@words中。
3、你把它反过来当然不行,你先提出了单词,再过行$key匹配,怎么会通过呢,两个操作的顺序都反了。
shenwei5566
2012-08-28 · TA获得超过610个赞
知道小有建树答主
回答量:575
采纳率:33%
帮助的人:254万
展开全部
这个语句就是找到含有$key的所有行,然后把没一行的第一个单词放到@words数组。map这一行其实是这样写map {($v)= $_ =~ /(\w+)/;$v},$_省略了,不能互换map和grep
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yxningbd
2012-08-28
知道答主
回答量:10
采纳率:0%
帮助的人:4.1万
展开全部
不管是grep和map还是再加个sort,perl都是从最右边开始执行的。
也就是说这句的意思是
1.对于文件句柄<DATA>里面的每一行进行处理(最右也就是)
2.处理什么呢?找到匹配$key的进行进一步处理
3.进一步处理什么呢?
3.1声明一个$v,在找到的一行里面匹配一个字符以上的东西,并负值给$v。如果不负值给$v直接用$_应该也是可以的。
3.2把$v放到@words的最后面
整个这个过程也可以用while循环来写N行,这么写就简单多啦 ̄へ ̄
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
背后看
2012-08-27
知道答主
回答量:39
采纳率:0%
帮助的人:22.1万
展开全部
呃,map用法看了没,
map EXPR,LIST
map BLOCK LIST
map返回是个LIST ,
你对照看看,你的语句属于哪种用法呢,
map 的处理 需要一个LIST 来提供数据,你的LIST 是不是grep部分,
追问
看了。我感觉是grep提供的list,然后$v是那个list的每一行。 
但是困惑的是为什么要 ($v) = /(\w+)/; $v(我的理解是,选择这行中的第一个单词,不明白的是为什么需要重新赋值给V)。
还有就是,grep和map这2句如果互换,就运行不出来。。不知道为什么
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式