作者Andor (柠檬汁)
看板perl
标题Re: [问题] 关於map的问题
时间Mon Jun 19 17:14:16 2006
※ 引述《LiloHuang (夏夜晚风)》之铭言:
: ※ 引述《HXZ (冲了啊)》之铭言:
: : 有一个map的问题不太懂
: : 程式如下:
: : @test = (1, 2, 3, a, b, c, d)
: : @r1 = map {/\D/} @test;
这个map传回的是((), (), (), (1), (1), (1), (1)),即(1, 1, 1, 1)
: : print "@r1\n";
: : 最後结果是: 1 1 1 1
: : 我不懂为什麽结果不是0 0 0 1 1 1 1
: : 可以请各位帮我解惑一下吗...orz 谢谢
(恕删)
: 推 HXZ:这个写法我知道... 06/13 17:45
: → HXZ:原来那样是因为比对失败传回的是undef吗? 06/13 17:47
比对失败传回的是(),即空list
: 推 LiloHuang:应该是比对没回传东西 06/13 19:47
: → LiloHuang:因为$r1[0]的值已经1了 如果是undef $r1[0]不会是这样 06/13 19:49
: → HXZ:就是我觉得不解的地方...总觉得应该要有东西... 06/13 19:52
: → HXZ:其实这个程式只是我在看map grep时随便写看看的..没想到会这样 06/13 19:54
: 推 HXZ:map {!/\D/} @test 结果print出三个1 ...orz 06/13 20:30
!会将/\D/传回的结果scalar化再取反,
所以这个map(在print的list context下)传回的是三个1和四个undef才对,
如果把这个map放在scalar的context下,可以发现结果是7
perldoc perlop
...
If the "/g" option is not used, "m//" in list context returns a
list consisting of the subexpressions matched by the parentheses
in the pattern, i.e., ($1, $2, $3...). (Note that here $1 etc.
are also set, and that this differs from Perl 4's behavior.)
When there are no parentheses in the pattern, the return value
is the list "(1)" for success. With or without parentheses, an
empty list is returned upon failure.
...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 143.89.144.107
1F:推 HXZ:thanks! 06/19 19:43
2F:推 darenhu:这个问题真有趣 07/08 03:34