免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5889 | 回复: 25
打印 上一主题 下一主题

为什么print出来的是这个结果 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-25 15:40 |只看该作者 |倒序浏览
水木上看到的一个帖子。
$j = 0;
print “hello world for first run ", $j=$j+1, "
        second run ", $j=$j+1, "
        third run ", $j=$j+1, "
";

打印出来的是
hello world for first run 3
second run 3
third run 3

而不是
hello world for first run 0
second run 1
third run 2

$j 应该累加啊,为啥不是一次一次累加的呢

论坛徽章:
0
2 [报告]
发表于 2010-02-25 15:43 |只看该作者
$j = 0;
print $j++, $j++, $j++;

而自加这种形式却是累加的

论坛徽章:
0
3 [报告]
发表于 2010-02-25 17:26 |只看该作者
print中$j已经经过了三次累加

论坛徽章:
0
4 [报告]
发表于 2010-02-25 17:43 |只看该作者
回复 1# infernor


    这个是列表操作符,你可以看看Programming_Perl_中文版_3rd_Edition.pdf 关于列表操作符那一节。
  1. perl -e '$j = 0;print (++$j, ++$j, ++$j);'
  2. perl -e '$j = 0;print ($j++, $j++, $j++);'
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-02-25 17:57 |只看该作者
回复 4# toniz


    我看了,还是不明白。{:3_185:} 能帮忙解释下么,谢谢

论坛徽章:
0
6 [报告]
发表于 2010-02-25 18:27 |只看该作者
本帖最后由 toniz 于 2010-02-25 18:42 编辑

回复 5# infernor


       这个代码应该可以帮助你理解
  1. use Data::Dumper;
  2. $j = 0;
  3. aa(++$j, ++$j, ++$j);
  4. $i = 0;
  5. aa($i++, $i++, $i++);
  6. sub aa(){
  7. my @aa = @_;
  8. print Dumper @aa;
  9. }
复制代码
因为这里的print 作为列表操作符,它和它的括号里的参数获得最高优先级,就好像一个普通函数调用。
然后就是前++和后++的关系了。一个是在返回变量值之前1,一个是在返回变量值之后加1。
所以如果是前++的话,那么他的值是在增加之后才返回的。所以当print传递括号里的变量的时候,它先做了3次加+1的动作,然后再返回,这样值就是3。
而后++的话,他的值是返回后才增加的,也列表运算符是左向的。所以当print传递括号里的变量的时候,它先返回值,然后+1,之后又返回值。。。。

论坛徽章:
0
7 [报告]
发表于 2010-02-25 18:31 |只看该作者
回复  infernor


     这个是列表操作符,你可以看看Programming_Perl_中文版_3rd_Edition.pdf ...
toniz 发表于 2010-02-25 17:43



   对呀,我也没有看明白:
bash-2.05# perl -e '$j = 0;print ($j++, $j++, $j++);'
012
bash-2.05# perl -e '$j = 0;print (++$j, ++$j, ++$j);'
333bash-2.05#

论坛徽章:
0
8 [报告]
发表于 2010-02-25 19:52 |只看该作者
回复 5# infernor


    :wink: 或许你看看这条的结果你就会明白了。
  1. perl -e '$j = 0;print ($j++, $j++, ++$j,$j++,$j++,++$j);'
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2010-02-25 20:12 |只看该作者
同学,别浪费时间了,你没必要这么做。

论坛徽章:
0
10 [报告]
发表于 2010-02-25 20:16 |只看该作者
本帖最后由 toniz 于 2010-02-25 20:38 编辑

回复 9# flw


    O(∩_∩)O哈哈   FLW老大出来了呀。

   自增自减这个C也有类似问题。和编译器有关。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP