973114 发表于 2018-8-31 08:41:51

Perl中实现循环的各种方法(基础)

  Perl中有多种方法实现循环:
  常规的while循环:
  


[*]my $i = 0;
[*]while($i < scalar @array) {
[*]    print $i, &quot;: &quot;, $array[$i];
[*]    $i++;
[*]}
  

  Perl同样支持until关键字:
  


[*]my $i = 0;
[*]until($i >= scalar @array) {
[*]    print $i, &quot;: &quot;, $array[$i];
[*]    $i++;
[*]}
  

  do循环基本跟等价于上面的形式(当@array是空的时候,将会有一个警告信息):
  


[*]my $i = 0;
[*]do {
[*]    print $i, &quot;: &quot;, $array[$i];
[*]    $i++;
[*]} while ($i < scalar @array);
  

  和
  


[*]my $i = 0;
[*]do {
[*]    print $i, &quot;: &quot;, $array[$i];
[*]    $i++;
[*]} until ($i >= scalar @array);
  

  基本的C风格循环同样有效。注意,我们如何把一个my变量放在for语句中,这是通过在循环范围内定义变量$i实现的:
  


[*]for(my $i = 0; $i < scalar @array; $i++) {
[*]    print $i, &quot;: &quot;, $array[$i];
[*]}
[*]# $i has ceased to exist here, which is much tidier.
  

  for循环被认为是古老的形式,并且尽可能避免使用。原生的列表迭代更美观。注意:和PHP不一样,for和foreach关键字是同义词。我们只用更容易阅读的方式:
  


[*]foreach my $string ( @array ) {
[*]    print $string;
[*]}
  

  如果你需要索引, range operator可以创建一个匿名整型列表:
  


[*]foreach my $i ( 0 .. $#array ) {
[*]    print $i, &quot;: &quot;, $array[$i];
[*]}
  

  你不能去迭代一个哈希变量。但是,你可以迭代它的键值。使用keys内置函数,获取哈希变量的所有键值数组。然后使用foreach方法,就像数组一样:
  


[*]foreach my $key (keys %scientists) {
[*]    print $key, &quot;: &quot;, $scientists{$key};
[*]}
  

  因为哈希变量没有顺序,键值可能以任何顺序被返回。使用sort内置函数对键值数组排序,按照字母表从小到大的方式:
  


[*]foreach my $key (sort keys %scientists) {
[*]    print $key, &quot;: &quot;, $scientists{$key};
[*]}
  

  如果使用默认的迭代,你只能在循环内部放置一条语句,你可以使用超级短的循环语法:
  


[*]print $_ foreach @array;


页: [1]
查看完整版本: Perl中实现循环的各种方法(基础)