加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中强制列表上下文

发布时间:2020-12-15 21:20:14 所属栏目:大数据 来源:网络整理
导读:我正在尝试理解Perl的背景,我跳过了一个岩石; 给定代码; #!/usr/bin/perlmy $b = (33,22,11);print "$bn";my $b = () = (33,11);print "$bn";my @b = (33,11);print "@bn";my @b = () = (33,11);print "@bn"; 结果是(最后一行是空白); 11 3 33 22 11 由
我正在尝试理解Perl的背景,我跳过了一个岩石;

给定代码;

#!/usr/bin/perl

my $b = (33,22,11);
print "$bn";

my $b = () = (33,11);
print "$bn";

my @b = (33,11);
print "@bn";

my @b = () = (33,11);
print "@bn";

结果是(最后一行是空白);

11  

 3 

 33 22 11

 <>

由于第二次打印返回了列表的长度,我假定在数组的某个地方生成数组,因为标量上下文中的数组可以计算出它的长度。但是,第四版印刷似乎相信这个假设。我期待看到’33 22 11’打印,但没有什么。这里发生了什么

解决方法

你感到困惑,因为你认为=是一个单一的运算符,而它可以导致两个不同的运算符:列表赋值运算符或标量赋值运算符。 Mini-Tutorial: Scalar vs List Assignment Operator解释了差异。
my $b = (33,11);
------------------            Scalar assign in void context.
        ----------            List literal in scalar context. Returns last.

my @b = (33,11);
------------------            List assign in void context.
        ----------            List literal in list context. Returns all.

my $b = ( () = (33,11) );
---------------------------   Scalar assign in void context.
        -------------------   List assign in scalar context. Returns count of RHS
               ----------     List literal in list context. Returns all.

my @b = ( () = (33,11) );
---------------------------   List assign in void context.
        -------------------   List assign in list context. Returns LHS.
               ----------     List literal in list context. Returns all.

至于你的头衔,强制列表上下文是不可能的。如果一个函数返回一个列表,当一个标量是预期的,它会导致堆栈上的额外值,这导致操作符得到错误的参数。

但是,您可以执行以下操作:

( EXPR )[0]

要么

( EXPR )[-1]

EXPR将在列表上下文中调用,但整个返回只返回列表的一个元素。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读