Некоторый объект предполагает .dispose()
метод, который вынуждает ресурс быть удаленным из памяти.
#!/usr/bin/env perl
use strict;
use warnings;
my @array;
open(my $fh, "<", "test.txt")
or die "Failed to open file: $!\n";
while(<$fh>) {
chomp;
push @array, $_;
}
close $fh;
print join " ", @array;
Вот мой единственный лайнер:
perl -e 'chomp(@a = <>); print join(" ", @a)' test.txt
Пояснение:
@a
массив chomp (..)
- удалить символы EOL для каждой строки @a
с использованием пробела в качестве разделителя Еще один ответ на ваш выбор:
#!/usr/bin/env perl
open(FILE, "<", "test.txt") or die("Can't open file");
@lines = <FILE>;
close(FILE);
chomp(@lines);
print join(" ", @lines);
Если вы часто прихлебываете файлы, вы можете использовать модуль File :: Slurp из CPAN:
use strict;
use warnings;
use File::Slurp;
my @lines = read_file('test.txt');
chomp @lines;
print "@lines\n";
Самый простой пример выглядит примерно так:
#!/usr/bin/env perl
use strict;
use warnings;
open(F, "<", "test.txt") or die("Cannot open test.txt: $!\n"); # (1)
my @lines = ();
while(<F>) { chomp; push(@lines, $_); } # (2)
close(F);
print "@lines"; # (3) stringify
(1) - это место, где открывается файл.
(2) Дескрипторы файлов прекрасно работают в средах списков (среды скаляров / списков определяются левым значением), поэтому, если вы назначаете массив к дескриптору файла все строки помещаются в массив. Строки разделяются (заканчиваются) значением $ /
, разделителем входных записей. Если вы используете английский язык;
, вы можете использовать $ IRS
или $ INPUT_RECORD_SEPARATOR
. Это значение по умолчанию - символ новой строки \ n
;
Хотя это казалось хорошей идеей, я просто забыл тот факт, что если вы напечатаете все строки, окончание \ n
также будет напечатан. Baaad me.
Первоначально код был:
my @lines = <F>;
вместо цикла while
. Это все еще жизнеспособная альтернатива, но вы должны заменить (3) на chomp
ing, а затем распечатать / преобразовать все элементы в строку:
for (@lines) { chomp; }
print "@lines";
(3) Строковое преобразование означает преобразование массива в строку и вставку значения $ "
между элементами массива. По умолчанию используется пробел.
См .: страница perlvar .
Таким образом, реальная вторая попытка:
#!/usr/bin/env perl
use strict;
use warnings;
open(F, "<", "test.txt") or die("Cannot open test.txt: $!\n"); # (1)
my @lines = <F>; # (2)
close(F);
chomp(@lines);
print "@lines"; # (3) stringify
Это самая простая версия, которую я мог придумать:
perl -l040 -pe';' < test.txt
Что примерно эквивалентно:
perl -pe'
chomp; $\ = $/; # -l
$\ = 040; # -040
'
и:
perl -e'
LINE:
while (<>) {
chomp; $\ = $/; # -l
$\ = " "; # -040
} continue {
print or die "-p destination: $!\n";
}
'
Это код, который делает это (предположим, что код ниже внутри script.pl):
use strict;
use warnings
my @array = <> ;
chomp @array;
print "@array";
Он запускается:
scirpt.pl [your file]