首页 > 解决方案 > (variable) = @_ 和 variable = @_ 有什么区别

问题描述

我正在学习perl,想调用一个函数,并传递2个参数给它,这里是代码:

use strict;
use warnins;

sub test
{
 my ($item) = @_;
 print "$item\n";
}

test("hello world");

结果是:你好世界

如果我将代码更改为这样:

my $item = @_;

那么结果是:1

差异的原因是什么?有点困惑,我理解@_是调用它时传递给函数test的参数,是字符串“hello world”,那么为什么将@_分配给$item后,结果是1,似乎是数组的长度@_ ,但 ($item) 是参数本身,

标签: perlparameter-passing

解决方案


有两种不同的赋值运算符,标量赋值运算符和列表赋值运算符。如果左侧=是列表、散列、数组或切片,则它是列表赋值。否则,它是一个标量赋值。

标量赋值给出其右操作数标量上下文。在标量上下文中,数组计算为数组中元素的数量。


推荐阅读