Perl 函数的作用是:返回后跟十六进制数的类型,而不是串联字符串

Perl 函数的作用是:返回后跟十六进制数的类型,而不是串联字符串,perl,Perl,本质上,我想要获取一个数组,并创建一个字符串,其中所述数组的元素由换行符分隔 我有一个名为$zones的数组。输出对$zones的引用将确认它是一个数组 以下代码: print_log(Dumper($zones)); print_log('-------'); print_log(Dumper(join("\n",$zones))); 结果如下所示: [2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = [ 'fake

本质上,我想要获取一个数组,并创建一个字符串,其中所述数组的元素由换行符分隔

我有一个名为
$zones
的数组。输出对
$zones
的引用将确认它是一个数组

以下代码:

print_log(Dumper($zones));
print_log('-------');
print_log(Dumper(join("\n",$zones)));
结果如下所示:

  [2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = [
          'fake.com25',
          'fake.com2',
          'fake.com27',
          'fake.com43',
          'fake.com41',
          'fake.com40',
          'fake.com39',
          'fake.com37',
          'fake.com36',
          'fake.com35',
          'fake.com31',
          'fake.com56',
          'fake.com55',
          'fake.com54',
          'fake.com53',
          'fake.com52',
          'fake.com51',
          'fake.com50',
          'fake.com49',
          'fake.com48',
          'fake.com42',
          'fake.com38',
          'fake.com34',
          'fake.com33',
          'fake.com32',
          'fake.com30',
          'fake.com29',
          'fake.com28',
          'fake.com26',
          'fake.com24',
          'fake.com23',
          'fake.com69',
          'fake.com68',
          'fake.com67',
          'fake.com66',
          '0',
          'fake.com44',
          'fake.com45',
          'fake.com46',
          'fake.com278'
        ];

[2013-06-15 16:23:29 -0500] info [dnsadmin] -------
[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = 'ARRAY(0x170cf0d8)';

我真的不想手动循环这个数组。有人能解释一下为什么
join()
函数返回类型的名称和十六进制数吗?

您需要的是
join(“\n“,@{$zones}”)
$zones
是数组引用,要连接数组值,必须首先在标量
$zones
前面加上

print_log(Dumper(join("\n",@$zones)));
有关更多信息,请参阅参考资料的简短教程:
用户1937198很好地解释了如何做,但为什么它是这样工作的呢

很简单:

$zones
不是数组。这是一个数组引用

join
适用于列表。因此,如果你这样做:

join("\n",$zones)
您实际上是在单个元素列表上调用
join
。元素是一个引用,它恰好字符串化为
数组(0x170cf0d8)

要使其正常工作,您必须取消对它的引用,并且可以通过使用实数据类型(
@
%
,或者在某些情况下
$
)作为前缀来完成

可以这样写:
@$zones
,或者(包括我在内的一些人说它更可读)为:
@{$zones}


当您使用嵌套结构时,这一点很重要,因为虽然可以使用普通数组作为变量,但在处理嵌套数据结构时,它始终是引用。

我将此标记为答案,因为它解释了它的工作原理。我不知道PERL有引用的概念,所以这个解释对我很有价值。