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