Я думаю, это то, что вы хотите. @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.
person
MattLBeck
schedule
11.03.2012