@files = <*.bvh>;
Это дает вам список файлов с расширением .bvh
. Таким образом, он будет содержать что-то вроде:
('foo.bvh', 'bar.bvh', 'baz.bvh')
Затем вы проходите по массиву с этим кодом:
foreach $file (@files) {
...
}
Каждый раз вокруг этого l oop, $file
будет содержать значение из вашего массива. Например, первая итерация $file
будет содержать foo.bvh
.
Затем вы открываете файлы ввода и вывода:
open (OLD, $file) || die "Couldn´t open $file: $!\n";
open (NEW, ">$file.bvh") || die "Couldn´t open $file.bvh: $!\n";
Поскольку $file
содержит foo.bvh
, ваш новый файл (который создается с использованием имени "$file.bvh"
) будет называться foo.bvh.bvh
.
Наивным решением будет удаление .bvh
из оператора open()
:
# DON'T DO THIS
open (OLD, $file) || die "Couldn´t open $file: $!\n";
open (NEW, ">$file") || die "Couldn´t open $file.bvh: $!\n";
Это не сработает, так как ваши старый и новый файлы теперь будут иметь одно и то же имя, и когда вы откроете новый файл для записи, он обрежет файл и удалит все ваши входные данные.
Вы в какой-то момент потребуется переименовать файл. И самый простой подход - сохранить существующие имена файлов и после обработки каждого файла переименовать его в исходное имя.
# And then at the end of your loop
# Note that as you're copying the new file over the old one,
# there's no need to delete the old one.
close OLD;
close NEW;
rename("$file.bvh", $file);