Все здесь имеют это право, вы используете одинарные кавычки в своем звонке на open
. Одинарные кавычки не интерполируют переменные в строку в кавычках. Двойные кавычки делают.
my $foo = 'cat';
print 'Why does the dog chase the $foo?'; # prints: Why does the dog chase the $foo?
print "Why does the dog chase the $foo?"; # prints: Why does the dog chase the cat?
Пока все хорошо. Но другие не дали вам несколько важных советов о open
.
Функция open
развивалась годами, как и Perl, работающий с файловыми дескрипторами. В старые времена open всегда вызывался с режимом и именем файла, объединенным во втором аргументе. Первым аргументом всегда был глобальный дескриптор файла.
Опыт показал, что это плохая идея. Объединение режима и имени файла в одном аргументе создало проблемы с безопасностью. Использование глобальных переменных, ну, это использование глобальных переменных.
Начиная с Perl 5.6.0, вы можете использовать форму открытия с тремя аргументами, которая намного более безопасна, и вы можете хранить свой дескриптор файла в скалярном лексическом ограничении.
open my $fh, '>', $file or die "Can't open $file - $!\n";
print $fh "Goes into the file\n";
Есть много хороших вещей в лексических дескрипторах файлов, но одно замечательное свойство заключается в том, что они автоматически закрываются, когда их счетчик падает до 0, и они уничтожаются. Нет необходимости явно закрывать их.
Еще кое-что, на что стоит обратить внимание, - это то, что большинство Perl-сообщества считают, что рекомендуется всегда использовать строгие и предупреждения прагмы. Их использование помогает выявить многие ошибки на ранних этапах процесса разработки и может значительно сэкономить время.
use strict;
use warnings;
for my $base ( 10_001..10_003 ) {
my $file = "$base.txt";
print "file: $file\n";
open my $fh,'>', $file or die "Can't open the output file: $!";
# Do stuff with handle.
}
Я тоже немного упростил ваш код. Я использовал оператор диапазона для генерации ваших базовых чисел для имен файлов. Поскольку мы работаем с числами, а не со строками, я смог использовать _
в качестве разделителя тысяч для улучшения читабельности без влияния на конечный результат. Наконец, я использовал идиоматический цикл perl for
вместо стиля C, который у вас был.
Надеюсь, вы найдете это полезным.