我有几个巨大的文本文件,我需要转置。为此目的,我仍然坚持使用Array :: Transpose的想法 - 但不知怎的,我不能走到尽头...... 这是我的源代码:
#!/usr/bin/perl
use warnings;
use strict;
use Array::Transpose;
my $eachline;
my $input=$ARGV[0];
my @array;
open (IN, "<$input") or die ("no such file!");
while(defined($eachline=<IN>))
{
push @array, split(/\t/,$eachline);
}
my @array2=transpose(\@array);
我无法看到,这个想法有什么问题,正如文件所说:
use Array::Transpose;
@array=transpose(\@array);
错误代码显示:
Can't use string ("") as an ARRAY ref while "strict refs" in use at /usr/local/share/perl/5.14.2/Array/Transpose.pm line 91, <IN> line 3.
我在编程方面几乎是新手,特别是在Perl中。我真的不明白这个错误意味着什么。我很满意任何有用的答案!
干杯,新手!
编辑:我忘了说:我的输入文件说:
Parameter1 \t Parameter2 \t .... ParameterXY \n
Value1 \t Value2...
等等。
我想要一个输出文件:
Parameter1 \t Value1 \t .....ValueXY \n
Parameter2 \t Value2 \t......
答案 0 :(得分:1)
您需要分别推送每一行。
my @row = split(/\t/,$eachline);
push @array, \@row;
@row
是一维数组。按\@row
会产生二维数组。我想你也希望chomp
删除行结尾。
完整的程序
#!/usr/bin/perl
use warnings;
use strict;
use Array::Transpose;
use Data::Dumper;
my $eachline;
my $input=$ARGV[0];
my @array;
open (IN, "<$input") or die ("no such file!");
while(defined($eachline=<IN>))
{
chomp $eachline ;
my @row = split(/\t/,$eachline);
push @array, \@row;
}
print Dumper(\@array) ;
my @array2=transpose(\@array);
print Dumper(\@array2) ;
另一种方式是push @array, [ split(/\t/,$eachline) ] ;
- [ ]
创建一个数组引用。