为什么Perl无法识别我要创建带有“ split”的arrayRef?

Chr*_*ris 1 perl

我想按空格分割标量,然后将结果保存在ArrayReference中。

use strict;
use warnings;

use Data::Dumper;

my $name = 'hans georg      mustermann';
my $array = split ' ', $name;

print Dumper($array);     #$VAR1 = 3;
Run Code Online (Sandbox Code Playgroud)

因此,$array现在看来size,该split操作的结果已成为一个标量。

当我将代码更改为my $array = [split ' ', $name];变量时$array,现在是ArrayReference并包含所有3个字符串。

我只是不了解这种行为。如果有人可以向我解释它或发布关于这些事情的优质文档,那将是非常不错的,因为我不知道如何搜索该主题。

先感谢您

小智 5

您在此处看到的称为“上下文”。关于此的文档相当分散。您还想看一下有关“标量与列表上下文”的教程 https://perlmaven.com/scalar-and-list-context-in-perl

如果将拆分(或任何子例程调用)结果分配给数组,则为列表上下文:

my @arr = split ' ', $name;
#=> @arr = ('hans', 'georg', 'mustermann');
Run Code Online (Sandbox Code Playgroud)

您的示例代码显示的是将它们分配给标量-因此,它位于“标量上下文”下。

由于自然而然地,不能将多个事物放在一起,因此需要进行某种汇总。对于split函数,perl5定义了结果中的元素数split应为最佳。

检查split函数的文档:https : //perldoc.pl/functions/split-实际上定义了标量上下文以及列表上下文下的行为。

还可以在https://perldoc.pl/functions上浏览所有内置函数的文档 -您会在大多数列表的“列表上下文”和“标量上下文”下找到行为定义-尽管其中很多不是返回“列表大小”,而是返回其他值。