免费注册 查看新帖 |

Chinaunix

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

perl2个小问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-30 17:15 |只看该作者 |倒序浏览
刚开始学习perl,还望前辈指点1,2。


1.       
在Perl 中是一条通用规则:如果去掉括号含义不变,那括号就是可选的.
@array=1..5 ; #ok
@array=1,2,3,4,5;#no 必须(1,2,3,4,5) Useless use of a constant in void context

这时括号为何不能省略?加上告警了,还是没太看懂。


2.        不加引号的字符串算什么?
@array=(“fred”, “barney”, “betty”, “wilma”, “dino”);#ok
@array=(fred, barney, betty, wilma, dino);#可以执行,但加告警时会告警;Unquoted string "fred" may clash with future reserved word

这样是否代表要表达字符串时最好用引号把标量引用起来?

论坛徽章:
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
2 [报告]
发表于 2012-01-30 17:47 |只看该作者
第一个是优先级 = , 优先级决定的

第二个除了 q qq qw use require => 和 hash 索引时,这几个简单的情况外总是加引号。可能这些你还没见全,那就是字符串的都加。省略引号那是 Perl4 和以前的遗留应该,Perl 5 都已经17年了

论坛徽章:
0
3 [报告]
发表于 2012-01-31 10:01 |只看该作者
很明了,谢谢
zhlong8 发表于 2012-01-30 17:47
第一个是优先级 = , 优先级决定的

第二个除了 q qq qw use require => 和 hash 索引时,这几个简单的情况 ...

论坛徽章:
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
4 [报告]
发表于 2012-01-31 10:29 |只看该作者
garyfujian 发表于 2012-01-31 10:01
很明了,谢谢


use 是不能加引号的,这个写错了。 编译器在遇到 bareword 也就看起来像字符串却又没引号的东西的时候会先判断是不是个函数,如果不是就当字符串处理。

所以 $a = what; 这个是合法的 $a 是字符串 'what',但是如果你定义了 what 这个函数那就是另一重意思了,编译的结果取决于之前是否声明了 what 这个函数。 这种时候就容易产生 bug 所以并不推荐使用。

q qq qw => 那是语法明确规定的不需要引号,合理的估计也就是 require 和 hash 索引这两种情况。

论坛徽章:
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
5 [报告]
发表于 2012-01-31 10:32 |只看该作者
另一方面如果你的函数在用之前没有声明,也没用 & 和括号,那就被当成字符串了。有参数还好能被编译器检查出来,没参数的话那就悲剧了,所以 use warnings 还是很必要的。

论坛徽章:
0
6 [报告]
发表于 2012-01-31 15:27 |只看该作者
多谢前辈的指点,在这里还再请教下几个小问题哈

(1)use strict; 要求变量使用 my,这样区块私有变量怎么实现,怎么区分;可否理解成区块外部的是本文件的私有变量,区块内部的是区块私有变量,互相不影响?经实验证实是正确的。可否这样理解?


(2)使用my操作符的问题,①②都正常,③不是我想要的
my $var=1;
① my $var=$var+1;  #输出为2
② $var+=1;         #输出为2
③ my $var+=1;      #输出为 1   my操作符再次使用赋值undef给变量?

(3)当函数碰到优先级
sub division{}
my $quotient = division 355, 113;  #虽然=比,优先级高,为啥不告警,是因为perl解释器会自动判别函数名后面都是参数?

zhlong8 发表于 2012-01-31 10:32
另一方面如果你的函数在用之前没有声明,也没用 & 和括号,那就被当成字符串了。有参数还好能被编译器检查出 ...

论坛徽章:
0
7 [报告]
发表于 2012-01-31 16:44 |只看该作者
1. block内的变量还是用my在block里面声明,如果是static var,则用local;
2. ③ 用my,即重新声明初始化了该变量,即0+1,得1;
3.这里有函数,先是函数运算,得到一个value,=号前面是标量上下文,不存在错误

论坛徽章:
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
8 [报告]
发表于 2012-01-31 21:14 |只看该作者
garyfujian 发表于 2012-01-31 15:27
多谢前辈的指点,在这里还再请教下几个小问题哈

(1)use strict; 要求变量使用 my,这样区块私有变量怎 ...


my 是词法变量,它从声明处起作用,直到包含它声明的语法块结束的部分,比如

  {
    xxx;
    xxx;
   my $a; 下面 $a 可见
    {
    xxx; # $a 可见
    }
  }  #出了语法块 $a 不可见

第二个不知道你什么意思,另外 my $val += 1; 这个应该没什么实际意义

第三个 = 的优先级是比 , 高,但是你忽略了函数调用的级别。这里推荐所有搞不太清楚的人仔细研读 perlop 的第二小节 Terms and List Operators (Leftward)  10遍,理解 list operator 的两个优先级是个很美妙的经验

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
9 [报告]
发表于 2012-01-31 22:35 |只看该作者
本帖最后由 seufy88 于 2012-01-31 22:36 编辑

第一个问题我刚问过.
不过没想到是用".."这个操作符
@array=1..5;   #ok
@array=(1,2,3,4,5);  #ok
@array=1,2,3,4,5  #bad
感谢zhlong8
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP