Chinaunix

标题: 这个map怎么用 [打印本页]

作者: 月波无漾    时间: 2006-12-27 22:19
标题: 这个map怎么用
  1. $ perl -e '@num=qw(A12 A13 A14 A15);@val=map {$_=~s/A//} @num;print @val;'
复制代码


我想用map把@num里的字符串中A去掉,生成一个(12,13,14,15)的列表,怎么这个结果是1111啊

ps:问题幼稚了点>_<
作者: 兰花仙子    时间: 2006-12-27 22:59
原帖由 月波无漾 于 2006-12-27 22:19 发表
  1. $ perl -e '@num=qw(A12 A13 A14 A15);@val=map {$_=~s/A//} @num;print @val;'
复制代码


我想用map把@num里的字符串中A去掉,生成一个(12,13,14,15)的列表,怎么这个结果是1111啊

ps:问题幼稚了点>_ ...

  1. perl -e '@num=qw(A12 A13 A14 A15);@val=map {s/A//;$_} @num;print @val;'
复制代码

作者: 兰花仙子    时间: 2006-12-27 23:02
另外,偶给点建议,map不要试图修改原始列表的内容.最好这样做:

  1. perl -e '@num=qw(A12 A13 A14 A15);@val=map {($x=$_)=~s/A//;$x} @num;print @val'
复制代码

作者: 月波无漾    时间: 2006-12-27 23:08
谢谢.不过还想问下,为什么我开始用的得到的是1111呢?
作者: xiaoshengcaicai    时间: 2006-12-28 08:56
map的用法楼主没有理解好,以为跟grep一样

@new_array = map {.....;  return sth} @array; 作用是把sth push到数组new_array

楼主写的
@val=map {$_=~s/A//} @num;
$_=~s/A// 这一行代码的返回值是真值1

当然把1 push到@val里面
作者: flw    时间: 2006-12-28 09:39
原帖由 兰花仙子 于 2006-12-27 23:02 发表
另外,偶给点建议,map不要试图修改原始列表的内容.最好这样做:

  1. perl -e '@num=qw(A12 A13 A14 A15);@val=map {($x=$_)=~s/A//;$x} @num;print @val'
复制代码
  1. perl -e '@num=qw(A12 A13 A14 A15);@val=@num;map {s/A//} @val;print @val;'
复制代码

作者: 月波无漾    时间: 2006-12-28 13:44
谢谢楼上各位,受教了.
作者: lll0905    时间: 2010-02-23 10:50
受教了
作者: Perl_Er    时间: 2010-02-23 11:02
returns the list value composed of the results of each such evaluation.
作者: ccc77    时间: 2010-02-23 13:11
returns the list value composed of the results of each such evaluation.
Perl_Er 发表于 2010-02-23 11:02




[root@204-74-217-83 prac]# perl -e '@lines=qw(a 1 2); @words=map { split ' ' } @lines; print @lines; print "\n";  print @words; print "\n";'
Missing right curly or square bracket at -e line 1, at end of line
syntax error at -e line 1, at EOF
Execution of -e aborted due to compilation errors.

我看了一下你这个例子。
为啥我这句话报错呢?
作者: ccc77    时间: 2010-02-23 13:25
回复 10# ccc77


    [root@204-74-217-83 prac]# perl -e '@lines=qw(a 1 2); @words=map { split / / } @lines; print @lines; print "\n";  print @words; print "\n";'   
a12
a12

这样就对了。split语法问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2