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

为什么我不能在Perl中执行“shift subroutine_name()”?

发布时间:2020-12-15 23:29:48 所属栏目:大数据 来源:网络整理
导读:为什么此代码返回Not a ARRAY引用错误? sub Prog { my $var1 = 1; my $var2 = 2; ($var1,$var2);}my $variable = shift Prog;print "$variablen"; 如果我使用中间数组,我避免错误: my @intermediate_array = Prog;my $variable = shift @intermediate_arr
为什么此代码返回Not a ARRAY引用错误?

sub Prog {
    my $var1 = 1;
    my $var2 = 2;
    ($var1,$var2);
}

my $variable = shift &Prog;
print "$variablen";

如果我使用中间数组,我避免错误:

my @intermediate_array = &Prog;
my $variable = shift @intermediate_array;
print "$variablen";

上面的代码现在输出“1”.

解决方法

子例程Prog返回标量列表. shift函数仅对数组进行操作.数组和列表不是一回事.数组有存储空间,但列表没有存储空间.

如果你想要的是获得Prog返回的列表的第一个元素,请执行以下操作:

sub Prog {
    return ( 'this','that' );
}

my $var = (Prog())[0];
print "$varn";

我将子调用更改为Prog()而不是& Prog,因为后者显然是旧样式.

您还可以将第一个元素分配给标量,就像其他元素一样:

my ($var) = Prog();

这大致相同:

my ($var,$ignored_var) = Prog();

然后忽略$ignored_var.如果你想清楚地忽略第二个值而不实际给它一个变量,你可以这样做:

my ($var,undef) = Prog();

(编辑:李大同)

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

    推荐文章
      热点阅读