unless 条件为假时才执行。与if相反;
until 条件为假时循环。与while相反;
while ($n<10){print "\n",($n+=2);} 输出:
2
4
6
8
my $d=$m++;## $d得到的是$m之前的值(5),然后$m增加到6
my $d=++$m;## $m先增加到6,然后再赋值给$d;
如果只有自加或自减,赋值无顺序。
裸块:
用{ }包裹起来,常用语区域变量;
查找字符出现的次数:
my @people = qw{ fred barney bamm-bamm wilma dino barney betty pebbles };
my %seen;
foreach (@people){
print "I've seen you somewhere before,$_!\n" if $seen{$_}++; }
$_操作符,在while循环下,是文件中的每一行,但是如果存在双层嵌套,如下:
while (<>) {
foreach (spilt){...}
}
这时$_就会被spilt分解为一个一个的单词.
last,next,redo:
last 跳出这个循环。
next 直接跳往循环底部。
redo 重新开始本次循环,注意,是重新开始,比如这是第二次循环,那么,redo会使第二次循环重新开始,即:这次循环还是第二次。
标签:
LINE:while (<>){
foreach (split) {
last LINE if /__end__/; ##跳出标签为LINE的循环
...
}
}
三目运算符:
运算表达式1 ? 运算表达式2 : 运算表达式3
如果1成立,就执行2,1不成立,就执行3
example:
my $size =
($width < 10) ? "small" :
($width < 20) ? "medium" :
($width < 50) ? "large" :
"extra-large"; #default
# $width=11时,输出的是medium,
# $width=21时,输出的是large。依次往下。
赋值也可以:my $name= $arry[$num] ? 'none value':'happy sky'
逻辑操作符:
&& 逻辑与---必须同时满足两个条件。
if ($abc>1 && $cde>1) {say "ok"}
|| 逻辑或---至少一个条件为真。
if ($abc>1 || $cde>1) {say "ok"}
赋值时也可以使用:
my $name= $arry[$num] || 'none value'
定义否操作:
my $last_name = defined $last_name{$someone} ? $last_name{someone}: '(no last name)'
等同于:my $last_name = $last_name{$someone} // '(no last name)'
printf "%s" ,$name;$name如果为空,则会出错,可以使用$name // ''