perl中的一个标量上下文问题

在《Perl语言入门》第125页有一句话:布尔上下文是一种比较特殊的标量上下文。然而我却并没有查到有关布尔上下文的相关内容。书上在这里举了一个用each函数遍历哈希列表的... 在《Perl语言入门》第125页有一句话:布尔上下文是一种比较特殊的标量上下文。然而我却并没有查到有关布尔上下文的相关内容。书上在这里举了一个用each函数遍历哈希列表的例子。
while(( $key, $value) = each %hash){
print "$key => $value\n";
}
书:这里的while循环条件就是一个布尔上下文,当Perl执行each%hash却已经没有任何键-值对时,each会返回空列表(而不是undef)。空列表会被赋值到( $key, $value),因此$key、$value均得到undef。

疑问1:布尔上下文特殊在那里?
疑问2:我仿照上面的代码做了以下验证,结果我以无法按我的思维解释,求高手点播。
-------------------------------------------------
if((undef,undef)){
print "hello world";
}
不会有输出。
-------------------------------------------------
if((1,undef)){
print "hello world";
}
不会有输出。
-------------------------------------------------
if((undef,1)){
print "hello world";
}
输出“hello world“。
-------------------------------------------------
if((1,1)){
print "hello world";
}
输出“hello world“。
-------------------------------------------------
if((1,2)){
print "hello world";
}
输出“hello world“。
-------------------------------------------------
if((1,2,undef)){
print "hello world";
}
不会有输出。同时报警告:Useless use of a constant (2) in void context
-------------------------------------------------
if((1,undef,2)){
print "hello world";
}
输出“hello world“。
-------------------------------------------------
if((1,undef,3,2)){
print "hello world";
}
输出“hello world“。同时报警告:Useless use of a constant (3) in void context
展开
 我来答
百度网友c9e795dda
2014-06-21 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1129万
展开全部

疑问1:布尔上下文特殊在那里?

它特别在不同於 eq, ne, ==, != 那样, 只会返回 1 或 undef, 它会返回一个 "能对应当前正在访问的数据型态" 的 "有内容的值" 或 "空值", 以 array 来说, 空值就是 (), 以 hash 来说空值就是 ( undef, undef )...


疑问2:我仿照上面的代码做了以下验证,结果我以无法按我的思维解释,求高手点播。

那你的思维是怎样的 ? 其实你写的 if ((....)) 这样的结构也无异於

$x = ( 1, 2, 3);
$y = ( 4, 5, undef);
print "'$x' '$y'";

结果只有最後一个值起了作用, 你写的在 if 中并没有被当成

@list = ( ... ) ;
print "Hello World" if ( @list ) ;

这样来处理

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式