在Perl中展平数组的一部分?

时间:2014-07-28 12:24:03

标签: perl

基本上当我使用Data :: Dumper时,我得到了

$VAR1 = [
          '63',
          'Joe',
          'Bloggs',
          '8-Mon',
          'FAU70',
          8
        ];
$VAR2 = 'Bye';

但我想得到的是

$VAR1 = 'Joe Bloggs 8-Mon';
$VAR2 = 'Bye';

关于我如何处理数组只包含一个曾经是多个值的值的任何想法?

谢谢!

3 个答案:

答案 0 :(得分:3)

假设您将数组放在变量@array中

my @array=(['63','Joe','Bloggs','8-Mon','FAU70',8],'Bye');

此阵列结构上的转储程序的工作方式如下:

$VAR1 = [
          '63',
          'Joe',
          'Bloggs',
          '8-Mon',
          'FAU70',
          8
        ];
$VAR2 = 'Bye';

用它来得到你想要的东西:

map{$_=join(" ",@$_[1..4]) if(ref $_ eq 'ARRAY');} @array;

现在转储器会像这样打印:

$VAR1 = 'Joe Bloggs 8-Mon FAU70';
$VAR2 = 'Bye';

答案 1 :(得分:1)

您可以使用切片[1..3]选择所需数组的部分,然后join使用如下所示的连接将它们my $a = [ '63', 'Joe', 'Bloggs', '8-Mon', 'FAU70', 8 ]; my $var1 = join ' ', @$a[1..3]; my $var2 = 'bye'; print "$var1 $var2\n"; 选为一个字符串:

Joe Bloggs 8-Mon bye

输出:

{{1}}

答案 2 :(得分:1)

如果您希望将所有数组引用列为字符串,则只需转换它们:

use strict;
use warnings;

use Data::Dumper;

my @array = (['63', 'Joe', 'Bloggs', '8-Mon', 'FAU70', 8], 'Bye');

print Dumper(map {ref $_ ? "@$_" : $_} @array);

输出:

$VAR1 = '63 Joe Bloggs 8-Mon FAU70 8';
$VAR2 = 'Bye';

但是,如果你的目标只是更紧密的输出,我建议调查Data::Dump作为Data::Dumper的替代方案:

use strict;
use warnings;

my @array = (['63', 'Joe', 'Bloggs', '8-Mon', 'FAU70', 8], 'Bye');

use Data::Dump;
dd @array;

输出:

([63, "Joe", "Bloggs", "8-Mon", "FAU70", 8], "Bye")