>>Если стоит не комплексная задача, а только изменение файла настоятельно рекоммендую использовать
>>sed .
>Тоесть делать вставки system (sed 's/....//');?
Нет. Использовать командный интерпретатор и sed. А о perl'e забыть.
>>
>>В качестве идеи для perl'a:
>>echo 'u!r.l9i!%!a!m%zt4e23s%-p5i62h11c' | perl -e '$_ = do { local $/; <STDIN> }; s/(%|!|\d*)//g; s/z/\@/g; print reverse(split(//));'
>>
>>Т.е. конструкцией: do { local $/; <FILEHANDLE> } читаем в переменную весь файл, а потом можем изгаляться над ним сколько вздумается. Нужно помнить, что на больших файлах могут выйти накладки с распределением памяти.
>
>Это фактически вывод в другой файл(здесь STDOUT), и все сводиться до
>>cp tempfile origfile
>Разве не так?
Что мешает записать $_ в тот же файл?! Предварительно сместив указатель на начало файла.
>Это фактически вывод в другой файл(здесь STDOUT), и все сводиться до
Разница имеется. Нет временного файла, все манипуляции осуществляются в памяти.
Если хотите непосредственно манипулировать файлом на диске, а не во временном хранилище используйте seek.
Пример,
#!/usr/bin/env perl -w
my $POSITION = 2;
open(FH, "+< filename") || die "can't update somewhere: $!";
seek(FH, $POSITION, 0);
# munge the record
print FH \000;
close FH;
perldoc -f seek
ps: и, наконец, perldoc -q file