曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3517|回复: 0
打印 上一主题 下一主题

上下文

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-9-24 10:58:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
所谓上下文,就是指表达式所在的位置。在 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!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 11:18 , Processed in 0.065650 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表