Perl:将标量直接分配给散列

Perl:将标量直接分配给散列,perl,hash,variable-assignment,scalar,sigils,Perl,Hash,Variable Assignment,Scalar,Sigils,在查看一些Perl代码时,我遇到了将chr的输出直接分配到散列的情况: local %str = chr(shift); 我对代码工作正常感到困惑,这让我意识到以下几点: perl -le 'my $jurso = 23; print $jurso;' 23 perl -le 'my %jurso = 23; print %jurso;' 23 perl -le 'my @jurso = 23; print @jurso;' 23 我认为将标量直接分配给散列或数组会导致错误。有人能解释为

在查看一些Perl代码时,我遇到了将chr的输出直接分配到散列的情况:

local %str = chr(shift);
我对代码工作正常感到困惑,这让我意识到以下几点:

perl -le 'my $jurso = 23; print $jurso;'
23

perl -le 'my %jurso = 23; print %jurso;'
23

perl -le 'my @jurso = 23; print @jurso;'
23
我认为将标量直接分配给散列或数组会导致错误。有人能解释为什么jurso变量的行为像标量一样,而不管所使用的符号是什么吗

谢谢。

两个词:上下文很重要。如果打开
warnings
,则更容易理解此处发生的情况:

> perl -wle 'my %jurso = 23; print %jurso;'
Odd number of elements in hash assignment at -e line 1.
Use of uninitialized value $jurso{"23"} in print at -e line 1.
23
换句话说,代码的第一条语句从单个项列表创建哈希。这不是一个好兆头(因为哈希在源列表中通常应该有偶数个元素),因此出现了第一个警告。仍然会创建一个散列:它有一个元素,用键
23
寻址,该元素的值是
undef

第二条语句试图打印这个散列,它首先回显一个键(23),然后回显它的值。正如您所记得的,它是
undef
,因此出现了第二个警告。尽管如此,该值还是以空字符串的形式打印出来。)

使用阵列,您甚至不会出现警告:

> perl -wle 'my @jurso = 23; print @jurso;'
23
。。。当第一条语句用单个项填充
@jurso
数组时,第二条语句只打印此数组。同样,上下文很重要。

两个词:上下文很重要。如果打开
warnings
,则更容易理解此处发生的情况:

> perl -wle 'my %jurso = 23; print %jurso;'
Odd number of elements in hash assignment at -e line 1.
Use of uninitialized value $jurso{"23"} in print at -e line 1.
23
换句话说,代码的第一条语句从单个项列表创建哈希。这不是一个好兆头(因为哈希在源列表中通常应该有偶数个元素),因此出现了第一个警告。仍然会创建一个散列:它有一个元素,用键
23
寻址,该元素的值是
undef

第二条语句试图打印这个散列,它首先回显一个键(23),然后回显它的值。正如您所记得的,它是
undef
,因此出现了第二个警告。尽管如此,该值还是以空字符串的形式打印出来。)

使用阵列,您甚至不会出现警告:

> perl -wle 'my @jurso = 23; print @jurso;'
23

。。。当第一条语句用单个项填充
@jurso
数组时,第二条语句只打印此数组。同样,上下文也很重要。

启用警告!perl-wle将为第二个案例讲述一个不同的故事!对于第二种情况,perl-wle将讲述一个不同的故事