Я написал очень простой скрипт:
#!/usr/bin/perl -w
use strict;
open (F, "<ids.txt") || die "fail: $!\n";
my @ids = <F>;
foreach my $string (@ids) {
chomp($string);
print "$string\n";
}
close F;
Это дает ожидаемый результат всего содержимого ids.txt:
привет
Мир
эти
раздражающий
исходный код
линии
Теперь я хочу добавить расширение файла: .txt для каждой строки. Эта строка должна помочь:
#!/usr/bin/perl -w
use strict;
open (F, "<ids.txt") || die "fail: $!\n";
my @ids = <F>;
foreach my $string (@ids) {
chomp($string);
$string .= ".txt";
print "$string\n";
}
close F;
Но результат следующий:
.txto
.txtd
.txte
.txtying
.txtcecode
Вместо добавления «.txt» к моим строкам первые 4 буквы моей строки будут заменены на «.txt». Поскольку я хочу проверить, существуют ли какие-либо файлы, мне нужно полное имя файла с расширением.
Я пытался рубить, жевать, подставлять (s/\n//), соединять и все такое. Но результат все равно замена вместо добавления.
Где ошибка?
print "abcd\rxyz\n"
-- результат будетxyzd
. 30.08.2011s/\R+\z//
это то, что вы хотите. 30.08.2011$/
является"\r\n"
в DOS и Windows? Я думаю, что окончания строк преобразуются только в"\n"
при вводе и обратно при выводе. Это основное различие между текстовым и двоичным режимами. 30.08.2011$/
это"\n"
в Windows. Perl по умолчанию добавляет слой:crlf
, который преобразует CRLF->LF при чтении и LF->CRLF при записи, так что нет \r для удаления chomp. 31.08.2011