Perl结构和赋值

use*_*094 2 arrays perl scalar

在perldata中,我找到了以下示例和解释.

@foo = ('cc', '-E', $bar);

assigns the entire list value to array @foo, but

$foo = ('cc', '-E', $bar);

assigns the value of variable $bar to the scalar variable $foo. 
Run Code Online (Sandbox Code Playgroud)

这真让我困惑,所以$foo相当于$bar?如何理解之间的区别@foo$foo

TLP*_*TLP 6

perldata中的示例:

@foo = ('cc', '-E', $bar);
$foo = ('cc', '-E', $bar);
Run Code Online (Sandbox Code Playgroud)

因为@foo创建了一个列表上下文,所以parens中的所有值都被赋值给@foo.$foo另一方面是标量,因此只分配列表中的最后一个元素,因为它位于标量上下文中.

它等于说:

'cc', '-E';
$foo = $bar;
Run Code Online (Sandbox Code Playgroud)

在Perl中,标量就像$foo只能保存一个值,所以列表的其余部分就会被丢弃.数组@foo会像列表一样包含多个值.

在Perl中,允许在不同类型的变量上使用相同的名称.@foo并且$foo将被视为两个不同的变量.