Я думаю, что это то, что вы хотите. @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"
поскольку это только имена файлов, вам нужно оп перед файлом, прежде чем вы получите доступ к содержимому файла. Итак, для inputfile1.ТХТ:
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.
спасибо очень много, но я хочу, чтобы увидеть элементы массива так, когда я пишу Еогеасп $ значения (@resultarray) { печать ($ значения); } то это дает ошибку, как глобального символ «$ значения» требует явного имени пакета в C: \ Users ...... как я могу напечатать элементы –
, а также для вашего кода, ошибка http://imageshack.us/photo/my-images/341/asdasdfasfagfq.png/ что –
Ошибка, возникающая при печати, является результатом использования прагмы 'use warnings'. Он требует, чтобы вы определили все переменные с именем пакета в начале. Поэтому в вашем случае вы должны написать 'my $ value' вместо' $ value'. Написание Perl-кода таким образом является * очень хорошей идеей *, потому что вы потратите гораздо меньше времени на отладку своих программ, как только вы привыкнете к нему. – MattLBeck