← eetop.cn_Perl语言入门(第四版小骆驼书)

推荐答案 测试一下

7.1在标量 Context中使用 List-Producing 表达式 ................................ ................................ ................…

问答题 中等 经典问答问答题

参考答案

在Perl中,上下文(Context)决定了表达式如何求值。标量上下文(Scalar Context)期望得到一个标量值,而列表上下文(List Context)期望得到一个列表。如果一个通常产生列表的表达式(List-Producing Expression)被用在标量上下文中,它的行为会发生变化:通常返回列表的元素个数(数组的长度)或某些特定值。例如,`grep`在列表上下文中返回匹配元素的列表,在标量上下文中返回匹配元素的数量;`map`在标量上下文中返回结果列表的元素个数;`sort`在标量上下文中返回undef;列表赋值`my @list = (...)`在标量上下文中返回尾部列表的元素个数;`reverse`在标量上下文中返回反转后的字符串(但仅当操作数是标量时);`keys`在标量上下文中返回哈希键的数量;`each`在标量上下文中返回键值对(但行为较特殊)。常见易错点:误以为`my $count = @array;`返回数组最后一个元素的值,实际上返回数组长度;或者认为`my $item = (1,2,3);`会得到3(实际上赋值给标量时,列表的最后一个元素被保留,但`$item`得到3是因为逗号运算符在标量上下文中返回最后一个表达式,并非列表上下文的特性)。核心考点:Perl上下文敏感特性,`wantarray`函数可以检测调用者期望的上下文(返回undef表示标量上下文,真表示列表上下文)。

涉及知识点

  • Perl上下文(标量与列表)
  • 列表产生表达式在标量上下文的行为
  • 常见内置函数(grep, map, sort, keys等)的上下文敏感性
  • 逗号运算符在标量上下文中的行为
  • wantarray函数检测上下文
← 上一题
登录后反馈错题
下一题 →