免费注册 查看新帖 |

Chinaunix

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

yes or no ? [复制链接]

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-28 13:23 |只看该作者 |倒序浏览
本帖最后由 rubyish 于 2011-11-28 14:19 编辑

  1. my $one = '1.00';
  2. print $one ~~ '1' ? 'yes' : 'no';
复制代码
字符串 ~~ 字符串
结果输出:no

  1. my $one = '1.00';
  2. $one + 5;
  3. print $one;
复制代码
$one + 5;
空语境。
结果输出:1.00
~
~
~
现在:以下有两个 print
请回答将会输出yes 还是 no?并且请说明原因?

  1. #script1.pl
  2. my $one = '1.00';
  3. $one + 5;
  4. print $one ~~ '1' ? 'yes' : 'no';
复制代码

  1. #script2.pl
  2. my $one = '1a';
  3. $one + 5;
  4. print $one ~~ '1' ? 'yes' : 'no';
复制代码
两个 print 会输出yes 还是 no?

论坛徽章:
0
2 [报告]
发表于 2011-11-28 13:33 |只看该作者
回复 1# rubyish


    当然是no啦,你加了5跟'1'比呢

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2011-11-28 13:37 |只看该作者

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
4 [报告]
发表于 2011-11-28 13:39 |只看该作者
回复  rubyish


    当然是no啦,你加了5跟'1'比呢
sosflyer 发表于 2011-11-28 13:33



两个 print都是 no?

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
5 [报告]
发表于 2011-11-28 13:43 |只看该作者
回复  rubyish
jason680 发表于 2011-11-28 13:37



    谢谢~

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
6 [报告]
发表于 2011-11-28 13:48 |只看该作者
还有没有人要回答
猜猜看??

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
7 [报告]
发表于 2011-11-28 15:50 |只看该作者
本帖最后由 rubyish 于 2011-11-28 16:26 编辑

结果是:
script1.pl:  yes
script2.pl:  no

有没有童鞋能够说明原因?

论坛徽章:
0
8 [报告]
发表于 2011-11-28 16:27 |只看该作者
楼主,你问的问题和我上周问的是一样的。

有两个知识点:
1) perl语言中标量的多值
2) perl语言中智能匹配的灵活性

具体解释,如下:
case 1
#############################################
my $one = '1.00';
Dump($one);
SV = PV(0x287044) at 0x182afe4
  REFCNT = 1
  FLAGS = (PADMY,POK,pPOK)
  PV = 0x1824b8c "1.00"\0
  CUR = 4
  LEN = 8
这时候变量one是字符串PV中可以看出来
#############################################
$one + 5; #操作符+,是典型的数字运算操作符,它会强制左右变量转化成为整形或者浮点型等数字类型
Dump($one);
SV = PVNV(0x288b5c) at 0x182afe4
  REFCNT = 1
  FLAGS = (PADMY,IOK,NOK,POK,pIOK,pNOK,pPOK)
  IV = 1
  NV = 1
  PV = 0x1824b8c "1.00"\0
  CUR = 4
  LEN = 8
你可以看到IV,NV的值是1,PV还是1.00。
变量one已经是多值标量了,并且IOK标签在前,说明会优先使用作为整形数字使用
#############################################
$one ~~ '1'
#智能操作符的特点是根据左右的数据类型再去选择语法的上下文环境。
#左边是多值标量,并且优先作为整形数字使用(即IV);右边是字符型‘1’。
#智能匹配左边或者右边是数字,而另外一边是字符串的时候,等于==
#右边转化成为整型数据1,所以比较是 1 == 1,即TRUE


case 2
#############################################
my $one = '1a';
Dump($one);
SV = PV(0x287044) at 0x182afe4
  REFCNT = 1
  FLAGS = (PADMY,POK,pPOK)
  PV = 0x28f8cc "1a"\0
  CUR = 2
  LEN = 4
这时候one是字符串,从PV当中就可以看到了
#############################################
$one + 5; #操作符+,是典型的数字运算操作符,它会强制左右变量转化成为整形或者浮点型等数字类型
Dump($one);
SV = PVNV(0x288b5c) at 0x182afe4
  REFCNT = 1
  FLAGS = (PADMY,POK,pIOK,pNOK,pPOK)
  IV = 1
  NV = 1
  PV = 0x28f8cc "1a"\0
  CUR = 2
  LEN = 4
这个时候变量one就转化成了多值标量,包含PV,IV,NV,并且优先作为字符串使用
#############################################
$one ~~ '1'
#智能操作符的特点是根据左右的数据类型再去选择语法的上下文环境。
#左边是多值标量,并且优先作为字符串使用(即PV);右边是字符型‘1’。
#智能匹配左边或者右边是数字,而另外一边是字符串的时候,等于==。但是若左右都是字符串,这时候相当于 eq
#所以比较是 ‘1a’  == ‘1’,即FALSE
#############################################


注意:我的描述中“优先当作什么使用”是我经过多次运算结果反推得到的,是我个人理解
我刚刚开始深入你学习perl,这方面还需要大家帮忙把把关。

谢谢

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2011-11-28 16:36 |只看该作者
回复 8# perlming


    原来是这样阿!!谢谢perlming~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP