The problem I believe you re having is the fact that Perl arrays can only be an array of a single piece of data. You can have each line in an array, but you don t want to store a single piece of data, you want to store 11 pieces of data.
Fortunately, Perl allows you to store references as a piece of data in your array. That reference can point to ...say... another array. Take a look at the Perl Reference Tutorial, and that should help you understand how this can be done.
这确实是一个相当简单的问题。 首先,请提供一只读到每一行的样子,把每一行划入一个叫做@file_array
的阵列。
use strict;
use warnings;
use autodie; #So I dont have to worry about my file
open (my $fh, "<", "dataFile.txt");
my @file_array;
while (my $line = <$fh>) {
chomp $line;
push (@file_array, $line);
}
现在,让我们制定一项方案,使其符合每一行,并分成一系列:
use strict;
use warnings;
use autodie; #So I dont have to worry about my file
open (my $fh, "<", "dataFile.txt");
my @file_array;
while (my $line = <$fh>) {
chomp $line;
my @line_array = split (/s+/, $line);
}
这两个方案只有一个行文。 档案分为一阵,第二行各行各行,分为一阵。
让我们把这两个方案结合起来。 此外,将Im改为将* 参考 代码> @line_array的每个要素列入@file_array
:
use strict;
use warnings;
use autodie; #So I dont have to worry about my file
open (my $fh, "<", "dataFile.txt");
my @file_array;
while (my $line = <$fh>) {
chomp $line;
my @line_array = split(/s+/, $line);
push (@file_array, @line_array);
}
如果我想谈一下我档案中的第三行,则作为参考储存在<代码>上。 我可以通过在{<><>>>>>> > >t中加入这一编号来回避$file_array ,这将让我回到我的
@line_array':
my @line_array = ${$file_array[2]};
现在,如果我想谈谈关于这个项目的第四个项目,我可以说:
my $element = $line_array[3];
但是,我也可以把这两项行动合并为一个单行。 下面,我引述了在<代码>上储存的阵列——file_array ,同时将第四项要素(要素3)考虑在内:
my $element = ${$file_array[2]}[3];
不清楚吗? 幸运的是,Perl有一个->
的操作员,允许你在不使用<代码>${><>> syntax的情况下参照阵列。 更便于阅读:
my $element = $file_array[2]->[3];
你们在现代的经历中看到了这种命运。 Perl方案。 这就是我如何谈论我的阵列。 事实上,Perl甚至允许你在各种阵列中完全清除阵列之间的arrow操作员。 你们可以这样说:
my $element = $file_array[2][3];