如何在Perl中打印一个多维数组的数组?
#!usr/bin/perl
@array =();
open(myfile,"sometext.txt");
while(<myfile>)
{
chomp;
push(@array,[split(" ")]);
}
close(myfile);
print @array[0];
而不是打印此多维数组中的第一个数组的元素,它会输出十六进制(?)指针引用。如果有人知道我可以如何打印这个数组,请张贴如何和它将不胜感激。如何在Perl中打印一个多维数组的数组?
你在这里。
Perl的多维数组实际上是对数组的引用的数组。在perl中,引用仅仅是一个标量变量。所以,当你试图打印你的整个数组时,它只打印出那个参考。您需要使用@ {}将标量的上下文更改为数组。
#!/usr/bin/perl
@array =();
open(myfile,"sometext.txt");
while(<myfile>)
{
chomp;
push(@array,[split(" ")]);
}
close(myfile);
print @{@array[0]};
Perl在这种情况下并不完全符合您的要求。你需要明确告诉Perl如何打印出你的数组。
试试这个:
use Data::Dumper;
print Dumper($array[0]);
或者这样:
foreach my $element (@{ $array[0] }) {
print $element, "\n";
}
或者这样:
print join ' ', @{ $array[0] };
print "\n";
这是你的示例代码,重新编写了一下做更多的错误检查,并打开strict和warnings。当这些功能打开时,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";
}
@James Thompson'split/\ s + /'和'split'''是不同的。 – 2010-03-02 01:11:41
您应该使用strict
和warnings
。后者会告诉你访问第一行的方式是$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;
我很惊讶,没有人没有提到这一点,但打印复杂数据的标准方法是Data::Dumper
。
use Data::Dumper;
#...
print Dumper($array[0]);
你也可以这样做:
print Dumper(@array);
当然,你不能击败方便的Smart::Comments
,所有你需要做的就是利用 三个初始哈希创建评论:
use Smart::Comments;
#...
### @array
@Vlad:不是真正的*数组*,而是**引用数组**。另外,你的榜单很可能是错误的。 – 2010-03-02 01:15:53
shebang系列原文是这样写的。 – 2010-03-02 01:19:22
还是错的。 * nix中的完整路径以“/”开头,因此shebang是'#!/ usr/bin/perl' – ghostdog74 2010-03-02 01:29:38