首页 > 代码库 > perl_来来来,解读一个小程序

perl_来来来,解读一个小程序

#!/usr/bin/perl -w
#by www.yiibai.com

@array = qw(This is a list of words without interpolation);

foreach $key (@array){
   print"Key is $key\n";
}

第一:qw是什么?

解答:简单说,可以使用qw()准备一个数组。例如,qw(foo bar baz) 相当于 (‘foo‘, ‘bar‘, ‘baz‘)。一些程序员认为,使用qw使Perl脚本更容易阅读。实际上,你可以使用任何分隔符,而不仅仅是括号组。

另外,在perl语言中,还有一个和qw比较像的qq,也解释一下qq:

qq{foobar}相当于 "foobar" ;

它的的意思为双引号字符串,可内插变量;

qw{foo bar}相当于‘foo‘,‘bar‘ ;

它的意思为用空格分解字符串,得到列表,相当于split(‘ ‘,‘foo bar‘) 

字符串比较等于用 eq 

q运算符对‘号转义的方式

$someword = ‘i \‘ve some money‘;    可以等价于:   $someword = q~i ‘ve some money~;

qq运算符对"号转义的方式  $someword = "i say \"ok!\".";  可以等价于:    $someword = qq~i say "ok!".~; 

qw代表用空格来分隔元素,得到列表  @list = ("perl","Regular","network","web");    可以等价于:    @list = qw(perl Regular network web); 

 


 

 

啥事foreach?

Perlforeach从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个。

foreach $key (@array){
   print"Key is $key\n";
}

 

控制变量(本例中为$key)每一次迭代从列表中取出一个新值。第一次为“This”,第二次为“is”,以此类推。

控制变量不是这些列表元素中的一个拷贝而是这些元素本身。

这就意味着,hiahia~也就是说我手里的不是你的影子,而是你的真身!一旦在我手里,我改变了你,你就真的会被改变;

如果在循环中修改这个变量,那原始列表中的元素也会被修改。

下面显示运行结果;

 

在考虑一个问题,当循环结束后,$key的值是什么?

其值和循环开始之前是一样的。Perl foreach循环中控制变量的值会被Perl自动保存和恢复。当循环进行时,是没有办法改变其值的。循环结束时,变量的值会回到循环开始前,如果没有值,则为undef。这意味着如果有一个变量和控制变量有相同的名字:“$key”,不用担心会混淆它们。但最好不要这样做,否则维护你代码的人会打你。

 

Key is This
Key is is
Key is a
Key is list
Key is of
Key is words
Key is without
Key is interpolation

考虑这个例子,对输入进行foreach操作:

Perl foreach(<STDIN>)  
{  
print“Isaw$_”;  
} 

在Perl foreach循环中,由于行输入操作在列表的context中使用,因为Perl foreach需要一个列表作为其参数。

因此,它在循环执行前会将所有的输入读入,而每一行作为列表的一个元素:

 


 

更多信息: https://my.oschina.net/liangzi1210/blog/120789

http://www.cnblogs.com/tobecrazy/archive/2013/06/28/3161784.html

http://www.yiibai.com/perl/perl_qw.html

http://developer.51cto.com/art/201007/214100.html

http://www.cnblogs.com/chip/p/4188557.html

perl_来来来,解读一个小程序