Мне нужно обработать с помощью perl текстовый файл размером 1 Гб, закодированный в кодировке UTF-16 с прямым порядком байтов, с окончаниями в стиле unix (т.е. только 0x000A без 0x000D в потоке) и LE BOM в начале. Файл обрабатывается в Windows (необходимы и Unix-решения). Под потоковым процессом я подразумеваю использование while (‹>), построчное чтение и запись. Было бы неплохо иметь однострочную командную строку, например:
perl -pe "BEGIN { SOME_PREPARATION }; s/SRC/DST/g;" infile.txt > outfile.txt
Шестнадцатеричный дамп ввода для тестирования (две строки: буквы "a" и "b" в каждой): FF FE 61 00 0A 00 62 00 0A 00
обработка типа s/b/c/g должна дать результат ("b" заменено на "c"): FF FE 61 00 0A 00 63 00 0A 00
PS. Прямо сейчас со всеми моими испытаниями либо есть проблема с выводом CRLF (байты 0D 0A выводятся, создавая неверный символ юникода, и мне нужно только 0A00 без 0D00, чтобы сохранить тот же стиль unix), либо каждая новая строка переключает LE/BE, т.е. " на одной строке 6100 на нечетных строках и 0061 на четных строках в выводе.