【问题标题】:what's the difference between (variable) = @_ and variable = @_ [duplicate](variable) = @_ 和 variable = @_ [重复] 之间有什么区别
【发布时间】:2019-11-16 13:05:49
【问题描述】:

我正在学习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) 是参数本身,

【问题讨论】:

标签: perl parameter-passing


【解决方案1】:

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

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

【讨论】:

  • 所以 $item 是一个标量,但 ($item) 是一个列表?
  • 是的。虽然一般() 只会影响优先级并且不会“制作”列表,但这是它们在语法上使不同运算符出现的几个地方之一
猜你喜欢
  • 2012-10-27
  • 1970-01-01
  • 2013-07-22
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多