#!usr/bin/perl
@array = ();
open(myfile,"sometext.txt");
while(<myfile>)
{
chomp;
push(@array,[split(" ")]);
}
close(myfile);
print @array[0];
它不是在这个多维数组中打印第一个数组的元素,而是输出十六进制(?)指针引用。如果有人知道我如何打印这个数组,请发布如何,非常感谢。
答案 0 :(得分:11)
您应该使用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;
答案 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";
以下是您的示例代码,重新编写一些代码以执行更多错误检查,然后启用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";
}
答案 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