Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48773
  • 博文数量: 43
  • 博客积分: 1161
  • 博客等级: 少尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-24 11:14
文章分类
文章存档

2011年(40)

2010年(3)

分类: Python/Ruby

2011-04-26 00:37:06

所谓上下文,指的是表达式所在的位置.一般来说,Perl在解析一个表达式的时候,要么希望得到一个标量,要么希望得到一个列表.
在Perl中,表达式总是根据所需要的上下文返回对应的值.
以数组的"名称"为例:在列表上下文中,它会产生元素的列表;但在标量上下文中,则会返回数组中元素的个数.
  1. #!perl
  2. use strict;
  3. my @people=qw(fred barney betty);
  4. my @sorted=sort @people;
  5. my $number=42+@people;
  6. print @sorted,"\n";
  7. print "@sorted\n";
  8. print $number."\n";

但是不能想当然的认为在标量上下文中,一定会得到(列表上下文中返回的列表的)元素个数,这需要看表达式的实现.
如sort在列表上下文中返回的是排序后的列表,在标量上下文中返回的是undef.

在列表上下文中使用产生标量的表达式会自动产生一个仅含此标量值的列表
  1. #!perl
  2. use strict;
  3. my @barney="hello" ' ' "world";
  4. my @fred=6*7;
  5. my @wilma=undef;
  6. my @betty=();
  7. print scalar @barney ":[@barney]\n";
  8. print scalar @fred ":[@fred]\n";
  9. print scalar @wilma ":[@wilma]\n";
  10. print scalar @betty ":[@betty]\n";
要清空一个列表,正确的做法应该是直接把一个空列表赋值给数组,如第6行.
第5行的做法是构建了一个只有一个元素的列表,这个唯一的元素的值是undef.
阅读(412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~