$stuff = ("one", "two", "three"); #最后$stuff的值是three
$x = ( ($a, $b) = (7,7,7) ); # set $x to 3, not 2
识别句法的原则是,尽量当成函数参数。如果想让perl尽量不当成函数参数,可以在前面加个+号。最终效果看优先级。
chdir +($foo) || die; # (chdir $foo) || die
chdir +($foo) * 20; # chdir ($foo * 20)
next unless –M $file > .5; # files are older than 12 hours,这个好用!
智能匹配是递归取到底的:
my @little = qw(red blue green);
my @bigger = ("red", "blue", [ "orange", "green" ] );
if (@little ~~ @bigger) { # true!
say "little is contained in bigger";
}
智能匹配检查HASH时只管看key,不管value
智能匹配先看右边的项,再看左边的项
given-when赋值要用do圈起来,因为given-when是返回状态,而非赋值:
my $value = do {
given (<STDIN>) {
0xFF0000 when /red/i;
0x00FF00 when /green/i;
0x0000FF when /blue/i;
warn "unknown RGB component '$_', using black instead\n";
0x000000;
}
};
given是生成一个词法作用域的$_,跟foreach里面用的全局$_作用域不同。
when的组合匹配太晕了,暂时不看了P181
eval/sub/do的代码块,不是循环,不能直接用last/redo啥的,do可以多套一副括号绕过限制。
do {{ last if ... }} while(...);
our限制变量可用范围,local限制某个变量某个取值的覆盖范围,my则是词法变量二者均限制。my/local声明变量而不显示赋值时,默认会设成undef/()。
our变量一经指定,则相当于覆盖该范围的全局变量,任何改动即时生效。
针对our变量加local声明赋新值,该新值不能穿透子函数内部生效。
没有评论:
发表评论