当前位置:  开发笔记 > 编程语言 > 正文

perl:为什么引用匿名数组标量?

如何解决《perl:为什么引用匿名数组标量?》经验,为你挑选了2个好方法。

我已经有10多年的Perl编程了,所以对于经验丰富的Perl程序员来说这可能是显而易见的.我搜索了一个答案,但没有找到任何答案.

我的问题是:为什么引用匿名数组标量?

例如,在以下代码中:

#!/usr/bin/perl

use strict;
use feature qw(say);

my @array1 = ('one');
say 'array ref 1: ' . \@array1;
my @array2 = ('one', 'two');
say 'array ref 2: ' . \@array2;
say 'array ref 3: ' . \('one');
say 'array ref 4: ' . \('one', 'two');

exit 0;

结果是:

array ref 1: ARRAY(0x1e1b1c0)
array ref 2: ARRAY(0x1e1b190)
array ref 3: SCALAR(0x1e1b280)
array ref 4: SCALAR(0x1e10c40)

为什么数组引用3和数组引用4标量?



1> ikegami..:

所有引用都是标量.对字符串化引用时,它包括引用的类型.这意味着你有一个标量的引用.

[ ]是构造数组的运算符.( )不会创建任何数组.

你要

say 'array ref 3: ' . ['one'];
say 'array ref 4: ' . ['one', 'two'];

通常,parens只是改变优先权.如果这是真的,

\('one', 'two')

相当于

('one', \'two')

这是因为标量上下文中的逗号/列表运算符通常返回其最后一个表达式计算的值.但是\(...)特殊的是等同于以下更有用的构造:

(\'one', \'two')

引用枚举列表与使用方括号不同 - 而是与创建引用列表相同!

@list = (\$a, \@b, \%c);
@list = \($a, @b, %c);      # same thing!

这意味着

say 'array ref 4: ' . \('one', 'two');

相当于

say 'array ref 4: ' . (\'one', \'two');

这相当于

say 'array ref 4: ' . \'two';



2> Quentin..:

来自perlref:

引用枚举列表与使用方括号不同 - 而是与创建引用列表相同!

@list = (\$a, \@b, \%c);
@list = \($a, @b, %c);      # same thing!

您会得到一个标量引用,因为列表中以其引用传递给LHS的项目是标量.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有