learning perl读书笔记(三)

Chapter 10: More Control Structures

1
2
3
if (){
} else{
}

1
2
3
unless (){
} else{
}

是相反逻辑的条件判断

-

1
2
until(){
}

1
2
while(){
}

对条件真假的判断也具有相反的语意

-

1
2
for (1..10){
}

是从1循环到10

-

1
2
my $last_name = $last_name{$someone} // 'no last name';
如果$last_name{$someone}不为undef,则传值给$lastname,如果是undef,$last_name的值就是'not last name'

Chapter 14: Strings and Sorting

  • index()返回的是子串第一次出现的位置
1
2
my $where = index($big, $small, $offset);
$where是$small在$big中第一次出现的位置,如果$small不是$big的子串,那么返回-1,$offset是起始搜索的位置。
  • rindex()返回的是子串最后一次出现的位置
  • substr($string, $offset, $limit, $replace)可以截取字符串,也可以对字符串进行子串替换操作

Chapter 16: Some Advanced Perl Techniques

  • array slice
1
2
3
my $new_home_phone = "555-6099";
my $new_address = "99380 Red Rock West";
@items[2, 3] = ($new_address, $new_home_phone);
  • Hash Slice
1
2
3
4
5
my @three_scores = @score{ qw/ barney fred dino/ };

my @players = qw/ barney fred dino /;
my @bowling_scores = (195, 205, 30);
@score{ @players } = @bowling_scores;
  • using eval

eval{};代码块可以trap程序运行时的exception,使程序不会crash。错误信息会保存在特殊变量$@里。
以下四种情况是eval无法被trap的:

  1. 语法错误
  2. 系统错误,比如说内存溢出
  3. warnings
  4. exit()操作