曲径通幽论坛

标题: 上下文 [打印本页]

作者: beyes    时间: 2011-9-24 10:58
标题: 上下文
所谓上下文,就是指表达式所在的位置。在 Perl 解析表达式时,要么希望得到一个标量,要么希望得到一个列表。在这个表达式上,Perl 希望得到什么,这就是该表达式的上下文。

比如有以下脚本内容:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
@people = qw( Tom Jasmine Molly );           
@sorted = sort @people;        
$number = 42 + @people;
print "$number \n";


上面,sort 操作符会读取列表的值,并且根据内部字符编码进行排序。所以 @sorted = sort @people; 这条表达式属于列表上下文。再看 $number = 42 + @people; 这条语句,$number 是一个标量,所以表达式是求标量值,因此这里属于标量上下文。那么在标量上下文中,返回的是数组中的元素个数,所以最后的打印结果会为 45 (42 + 3) 。

再看一个 reverse 操作符的例子。当它在列表上下文中,它返回的是逆序后的列表;在标量上下文中,返回的则是逆序后的字符串。如下代码:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

@name = reverse qw/www groad net/;

$name = reverse qw/www groad net/;
foreach (@name) {
        print "$_ ";
}

print "\n";

print "$name \n";


运行输出:
./context.pl
net groad www
tendaorgwww


使用 scalar 强制指定标量上下文
scalar 是个伪函数,它用来告诉 Perl 被它指示的地方要切换到标量上下文中。下面看一个例子:
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl

@name = qw/www groad net/;

print "Welcome to @name \n";

print "This domain is ", scalar @name, " years old!\n";


运行输出:
./context.pl
Welcome to www groad net
This domain is 3 years old!





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2