Это недокументировано в Tie::File
perldoc , но вы хотите передать параметр discipline => ':encoding(UTF-16LE)'
при связывании файла:
tie my @lines, 'Tie::File', $input_file, discipline => ':encoding(UTF-16LE)'
Обратите внимание, что третий аргументимя файла, связанного с связанным массивом.Tie::File
автоматически откроет и обработает файловый дескриптор для вас;нет необходимости вызывать open
для файла самостоятельно.
@lines
теперь содержит содержимое файла, поэтому следующее, что нужно сделать, это проверить первую строку:
if ($lines[0] =~ m/pattern/) {
my $line = shift @lines;
untie @lines; # rewrites, closes the file, w/o first line
my ($name) = $line =~ /^(.*).csv/i;
rename $input_file, "$name.dat";
}
Но я согласен с TLP, что Tie::File
излишне для этой работы.
(Мой предыдущий ответ об открытии дескриптора файла с правильной кодировкой и передаче глобуса в качестве третьего аргумента для Tie::File
не будетработать, так как (1) он не открыл файл в режиме чтения / записи и (2), даже если он это сделал, Tie::File
не может или не применяет кодировку для чтения и записи в файлручка)