如何在Perl中打印多维数组的一个数组?

时间:2010-03-02 00:45:56

标签: perl file text arrays multidimensional-array

#!usr/bin/perl
@array = ();
open(myfile,"sometext.txt");
while(<myfile>)
{
    chomp;
    push(@array,[split(" ")]);
}
close(myfile);
print @array[0];

它不是在这个多维数组中打印第一个数组的元素,而是输出十六进制(?)指针引用。如果有人知道我如何打印这个数组,请发布如何,非常感谢。

4 个答案:

答案 0 :(得分:11)

您应该使用strictwarnings。后者会告诉你访问第一行的方式是$array[0]。现在,该值是对您推送到@array的匿名数组的引用。因此,您需要取消引用:print "@{ $array[0] }\n";

#!/usr/bin/perl

use strict; use warnings;

my @array;

my $input_file = 'sometext.txt';

open my $input, '<', $input_file
    or die "Cannot open '$input_file': $!";

while(<$input>) {
    chomp;
    push @array, [ split ];
}

close $input;

print "@$_\n" for @array;

答案 1 :(得分:4)

在这种情况下,Perl并不能完全满足您的需求。您需要明确告诉Perl如何打印出您的数组。

试试这个:

use Data::Dumper;
print Dumper( $array[0] );

或者这个:

foreach my $element ( @{ $array[0] } ) {
    print $element, "\n";
}

或者这个:

print join ' ', @{ $array[0] };
print "\n";

以下是您的示例代码,重新编写一些代码以执行更多错误检查,然后启用strictwarnings。当这些打开时,Perl会做更多检查并限制您使用更安全的语言子集。

#!/usr/bin/perl

use strict;
use warnings; 

my @arrays;
my $fn = 'summary.txt';
open FILE, "<$fn" or die "Error opening file ($!)";

while( my $line = <FILE> ) {
    chomp $line;
    my @data = split ' ', $line;
    push @arrays, \@data;
}
close FILE or die $!;

# print out comma-separated arrays, one per line
foreach my $array (@arrays) {
    print join ",", @$array;
    print "\n";
}

答案 2 :(得分:3)

你走了。

Perl的多维数组实际上是对数组的引用数组。在perl中,引用只是一个标量变量。因此,当您尝试打印整个数组时,它会打印出该引用。您需要使用@ {}将标量的上下文更改为数组。

#!/usr/bin/perl
@array = ();
open(myfile,"sometext.txt");
while(<myfile>)
{
    chomp;
    push(@array,[split(" ")]);
}
close(myfile);
print @{@array[0]};

答案 3 :(得分:3)

我很惊讶没人提到这一点,但打印复杂数据的标准方法是Data::Dumper

use Data::Dumper;
#...
print Dumper( $array[0] );

你也可以这样做:

print Dumper( @array );

当然,你无法击败Smart::Comments的轻松,所有你需要做的就是 使用三个初始哈希值创建注释:

use Smart::Comments;
#...
### @array
相关问题