全部博文(48)
分类: Python/Ruby
2012-01-31 09:25:10
1. 括号可选时,但要注意操作符优先级
在Perl 中是一条通用规则:如果去掉括号含义不变,那括号就是可选的.
@array=1..3 ; #ok
@array=1,2,3;#no 必须(1,2,3)
# Useless use of a constant in void context其值未被存于变量或者被别的方式使用。
Q:这时括号为何不能省略?
A:这是由= , 优先级决定的, 相当于($array[0],$array[1],$array[2])=1,2,3 ;
2. 不加引号的字符串算什么?
@array=(“fred”,
“barney”, “betty”, “wilma”, “dino”);#ok
@array=(fred,
barney, betty, wilma, dino);#可以执行,但加告警时会告警;Unquoted
string "fred" may clash with future reserved word
Q:这样是否代表要表达字符串时最好用引号把标量引用起来?
A: 除了 q qq qw require => 和 hash 索引时,这几个简单的情况外总是加引号;省略引号那是 Perl4 和以前的遗留应该,Perl 5 都已经17年了;
其中q qq qw => 那是语法明确规定的不需要引号;
编译器在遇到 bareword 也就看起来像字符串却又没引号的东西的时候会先判断是不是个函数,如果不是就当字符串处理。
函数在用之前没有声明,也没用 & 和括号,那就被当成字符串了。有参数还好能被编译器检查出来,没参数的话那就悲剧了,所以 use warnings 还是很必要的。
3. use strict; 要求变量使用 my,这样区块私有变量怎么实现,怎么区分;可否理解成区块外部的是本文件的私有变量,区块内部的是区块私有变量,互相不影响?经实验证实是正确的。可否这样理解?
my 是词法变量,它从声明处起作用,直到包含它声明的语法块结束的部分,比如
{
xxx;
xxx;
my $a; 下面 $a 可见
{
xxx; # $a 可见
}
} #出了语法块 $a 不可见
4.
使用my操作符的问题,①②都正常,③不是我想要的
my $var=1;
① my $var=$var+1; #输出为2
② $var+=1; #输出为2
③ my $var+=1; #输出为 1 my操作符再次使用赋值undef给变量?
重新声明初始化了该变量,即0+1,得1;
5.
当函数碰到优先级
sub division{}
my $quotient = division 355, 113; #虽然=比,优先级高,为啥不告警,是因为perl解释器会自动判别函数名后面都是参数?
= 的优先级是比 , 高,但是忽略了函数调用的级别。详见perlop中的【Terms, and
list operators】。