我想这就是你想要的。此代码中的@resultarray 最终将包含一个数字列表。
如果您要为程序提供一个文件名以用作命令行输入,请将其从 ARGV 数组中取出并作为文件句柄打开:
my $filename = $ARGV[0];
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
获得文件句柄后,您可以使用 while 循环遍历文件的每一行。 chomp 将换行符从每行的末尾移除。使用split 根据空格分割每一行。这将返回一个数组(在我的代码中为@linearray),其中包含该行中的数字列表。然后我将push 我的线阵列放在我的@resultarray 的末尾。
my @resultarray;
while(my $line = <$filehandle>){
chomp $line;
my @linearray = split(" ", $line);
push(@resultarray, @linearray);
}
记得添加
use warnings;
use strict;
在您的 perl 文件顶部,如果您在代码中遇到任何问题,可以为您提供帮助。
只是为了阐明如何处理程序的不同输入。以下命令:
perlfile.pl < inputfile.txt
将获取 inputfile.txt 的 内容 并将其通过管道传输到 STDIN 文件句柄。然后,您可以使用此文件句柄访问 inputfile.txt 的内容
while(my $line = <STDIN>){
# do something with this $line
}
但您也可以通过将它们放在执行命令之后来为您的程序提供多个文件名以供读取:
perlfile.pl inputfile1.txt inputfile2.txt
这些文件名将被读取为字符串并放入@ARGV 数组中,因此该数组将如下所示:
@ARGV:
[0] => "inputfile1.txt"
[1] => "inputfile2.txt"
由于这些只是文件的名称,因此您需要先在 perl 中打开文件,然后才能访问文件的内容。所以对于inputfile1.txt:
my $filename1 = shift(@ARGV);
open(my $filehandle1, '<', $filename1) or die "Can't open $filename1";
while(my $line = <$filehandle1>){
# do something with this line
}
注意我这次如何使用shift 来获取数组@ARGV 中的下一个元素。有关班次的更多详细信息,请参阅perldoc。还有更多关于open的信息。