通过本次学习,我加深了对perl的印象。目前感觉可以用“元素”和“列表”来总结perl中的一些概念。元素有数值和字符串两种,列表中的元素可能是数值也可能是字符串。指向元素的变量用$开头,指向列表的变量用@开头。继续思考下去,有个问题是perl是如何在数值和字符串之间转换的?要深入理解perl,理解这个转换细节是必要的。可以参考:http://book.51cto.com/art/201104/259065.htm 。顺便的,往后翻几页可以看到http://book.51cto.com/art/201104/259067.htm这里提到了“弄清列表和数组间的差别”,我想应该修改为“弄清变量名称和变量内容的差别”,变量名称和变量内容在内存中应是分开存储的,@mylist=('a','b','c'); 中“mylist”是变量名,('a','b','c')是变量内容的表达式,变量内容也可以表达为qw(a b c)。那么,理解$size=()=qw(a b c);语句,就应该是这样:()=qw(a b c)上下文环境要求返回列表不要求变量名引用,$size=....上下文要求返回标量,根据perl的自动转换“规矩”,就返回了3。至于为什么$size=qw(a b c);返回c而不是3,也较容易理解:qw(a b c)只是个表达式,这个表达式放到列表上下文中会被解析为列表存储在内存中,但是到了标量上下文中就是$size=('a','b','c'); 根据perl的自动转换“规矩”,返回了c。
练习(f43.pl):
#!/usr/bin/perl -w
$size=qw(a b c);
print qq($size \n);
$size=()=qw(a b c);
print qq($size \n);
$ perl f43.pl
Useless use of a constant in void context at f43.pl line 2.
Useless use of a constant in void context at f43.pl line 2.
c
3
上面输出中报了"Useless use of a constant in void context"报警信息的意思是$size=qw(a b c); 这个语句前两个值a和b没派上用场。
修改成下面这样就不会报警了: