免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 兰花仙子
打印 上一主题 下一主题

个人不太接受的perl一个特点 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-08-29 21:22 |只看该作者
PromatoMacBook-Pro:~ pro$ irb
>> x=1
=> 1
>> y="2"
=> "2"
>> x+y
TypeError: String can't be coerced into Fixnum
        from (irb):3:in `+'
        from (irb):3
>> x.class
=> Fixnum
>> y.class
=> String
>> x+y.to_i
=> 3

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
22 [报告]
发表于 2012-08-30 03:42 |只看该作者
回复 20# 兰花仙子


    Perl适合懒人

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
23 [报告]
发表于 2012-08-30 06:13 |只看该作者
回复 1# 兰花仙子


    刚写了个测路由的代码,调了好久才弄对,正好中你这个陷阱了,果然是个大坑,哈哈
  1. #!perl   
  2. use strict;
  3. use warnings;
  4. use 5.010;
  5. my @mask=qw (248 0 0 0);
  6. my @ip=qw(20 0 0 0);
  7. say join '.',  map { $ip[$_] & $mask[$_] }  0..3;
  8. say join '.',  map { $ip[$_]+0 & $mask[$_]+0 }  0..3;
  9. say join '.',  map { $ip[$_] & $mask[$_] }  0..3;


  10. Result:
  11. 20.0.0.0
  12. 16.0.0.0
  13. 16.0.0.0
复制代码

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
24 [报告]
发表于 2012-08-30 08:50 |只看该作者
回复 23# ttcn_cu


    我在想这或许是 Perl 的 bug,Perl 虽然会在需要的时候在字符串和数字之间进行转换,但是转换应该都是临时的,应该不会改变变量本身原来的类型的。事实上我刚才测试了一下只有数字运算操作符会将字符变量永久转换成数字变量,但是字符操作符只会将数字变量临时转换成字符。不知道老版本里的 Perl (比如 Perl 5.8)是不是这样的,我测试了 Perl 5.14.2 和 Perl 5.16.1,都有这个问题。谁感兴趣的话可以尝试去提交个 Perl bug 试试。

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
25 [报告]
发表于 2012-08-30 09:31 |只看该作者
本帖最后由 pitonas 于 2013-12-13 10:55 编辑

Perl  适合懒人

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
26 [报告]
发表于 2012-08-30 10:21 |只看该作者
回复 24# Monox


    它同时具有两种类型,既是字符串又是数字。他这里的问题是 & 对字符串和数字有两种意义,数字的优先级要更高,qw 产生的是字符串所以一开始是字符串的 & 后面进行了数学运算后里面的值同时具有了两种类型,在进行 & 就是优先级更高的数字 & 了。当然这里的却不太和谐

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
27 [报告]
发表于 2012-08-30 11:13 |只看该作者
回复 26# zhlong8


    我测试的时候是用 Data:umper 测试的,字符变量与一个数字相加以后,Dumper 认为它是数字,数字变量与一个字符进行连接操作以后 Dumper 仍旧认为它是数字,所以这不是 & 的问题。我知道 SV 里同时存在着数字和字符串的 slot,但是并不能因为两个 slot 里都有值了就认为它是数字吧,slot 里的数字只是为了以后运算的效率而考虑的,但是把整个变量当成数字还是很奇怪。不过要是 Larry 本身就是这么考虑的话就没办法了,只是在任何地方都找不到相关的准确说法,所以我在想或许是一个 bug。反正 Perl 反常的东西多得很,我是没办法判断一个现象到底是 feature 还是 bug 的。我本来可以自己尝试去报个 bug 看看那些 porters 是怎么看待这个问题的,不过我现在逐渐地不使用 Perl 了,也就懒得提交 bug 了。

论坛徽章:
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
28 [报告]
发表于 2012-08-30 11:48 |只看该作者
本帖最后由 jason680 于 2012-08-30 11:56 编辑

回复 23# ttcn_cu

use strict;
use warnings;
use 5.010;
my @mask=(248, 0, 0, 0);
my @ip=(20, 0, 0, 0);


say join '.',  map { $ip[$_] & $mask[$_] }  0..3;
say join '.',  map { $ip[$_]+0 & $mask[$_]+0 }  0..3;
say join '.',  map { $ip[$_] & $mask[$_] }  0..3;

result:
16.0.0.0
16.0.0.0
16.0.0.0

---------------------------------------
Note: string also can do &
# perl -e 'print "AB" & "BC"'
@B

论坛徽章:
0
29 [报告]
发表于 2012-08-30 13:24 |只看该作者
回复 28# jason680


是说qw()默认内容是字符串上下文么

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
30 [报告]
发表于 2012-08-30 14:38 来自手机 |只看该作者
我原来的数据都是route命令的屏幕拷贝,所以来源必然是字符形的。估计大部分脚本的实际数据来源都是命令输出,文本读入,网页获取,用户输入一类的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP