testfile.txt文件内容:
I am the very model of
a modern major-general.
perl代码实现需求:读取文件testfile.txt至列表,然后把读取的数据反转顺序输出
#!/usr/bin/perl -w

open(MYFILE, "testfile.txt") || die "opening testfile: $!";
@stuff=<MYFILE>;
close(MYFILE);
foreach(reverse(@stuff)){  
  #print scalar(reverse($_));#输出一
  #print reverse($_);          #输出二
}
输出结果:
输出一:
.lareneg-rojam nredom a
fo ledom yrev eht ma I
输出二:
a modern major-general.I am the very model of
两句print不同的地方是多了个scalar函数。
书中的解释是:列表的每一行(现在位于$_中)本身也进行倒序,由从左到由,变成从右到左,并且输出倒序后的每一行。它需要使用scalar函数。因为print期望一个列表。另外,在列表上下文中,reverse用于对列表进行倒序,这样,$_就不会出现问题。scalar函数将强制reverse进入标量上下文中,同时它按逐个字符对$_进行倒序。
我自己的理解是:
(1)scalar(它并不是真正的函数,只不过告诉perl这里要切换到标量上下文,即reverse($_)的结果需要强制切换到标量上下文中,相当于$a=reverse($_)
(2)@a=reverse qw/abc efg/ #@a=qw/efg abc/
          $a=reverse qw/abc efg/ #$a="gfecba"
         当reverse在标量上下文中,则把参数看成一个标量,然后反转。