Вторая ссылка из гугла:
open (OUTPUTFILE, ">$output") or die ("Problem with opening $output: $!");
print OUTPUT "Whatever you want to add to the file"; close OUTPUT;
PS чем перл-то понравился? Ты много других языков знаешь/видел?
> Регулярки у него удобные. Как на питоне будет s/([0-9])/$a[$1]/g ?
dest = re.sub( '([0-9])', lambda m: a[m.group(0)], src )
Несколько сложнее, зато это не является частью языка и такой же синтаксис может предоставить другая библиотека.
Что такое типовой шелловый скрипт (у меня)? Сижу в цикле, вызываю внешние программки (а вовсе не перловые модули!), парсю их выхлоп, решаю что делать, самый минимум арифметики. На bash-е реглярка, структуры управления и арифметика выглядит ужасно. Потому юзаю перл, где все хорошо, башевские конвееры и перенаправления юзаю вот так $a=`foo | bar 2>baz` ... но идилию нарушает желание сказать `echo $a > $outfile`. Это довольно глупо выглядит, $a надо предварительно экранировать. Хотелось бы в перле сказать $a ==> $outfile. И наоборот $b<==$infile. Понагляднее, попроще и не очень извращенно... хотя я даже соглашусь на фильтр.
> Как записать перловые /"\\'\d'"/ с минимумом слэшей?
Используя r'''...''' синтаксис:
re.search( r'''"\\'\d'"''', str )
Читабельности можно добавить при помощи re.X:
re.search( r"""
"\\'\d'"
""", str, re.X )
> Что такое типовой шелловый скрипт (у меня)? Сижу в цикле, вызываю внешние программки (а вовсе не перловые модули!), парсю их выхлоп, решаю что делать, самый минимум арифметики.
ну, если речь идёт о минимуме кода обработки, где запись write_file('myfile', $data) уже чуть ли не половина всего кода, так может есть смысл эпизодически обращаться к перлу с шелл-скрипта? например:
ifconfig ppp0 | perl -nE '/RX bytes:(\d+)/ && say "RX=$1";/TX bytes:(\d+)/ && say "TX=$1"' >"/tmp/ppp0_`date +%F_%T`.log"
man perlrun, кстати, там есть много интересного ;) перл это, всё же, не замена шеллу, а скорее дополнение.
вот, из одного довольно древнего краткого руководства. Фактически является переводом 'perldoc -f open', но насколько соответствует современной ее версии судить не берусь.
Если перед именем стоит символ '<' то файл открывается только на чтение (значение по умолчанию). Если '>' - на запись. Если '>>' - на добавление записей. '+>' или '+<' - файл открыт на чтение и запись одновременно. Если имя файла начинается с символа '|', то имя считается системной командой, на вход которой выводятся данные (поток). Имя '-' - стандартный вход (STDIN), '>-' - стандартный вывод (STDOUT). Функция возвращает true при успехе и false - неудаче.
Если имя (выражение) начинается с символов ">&", то остаток имени считается именем указателя файла, который открывается повторно. Символ '&' может стоять после '<', '>>', '+>', '+>>' и '+<'. Режим повторного открытия должен соответствовать первому. Выражение вида "<&=N" где N -число, эквивалентно системному вызову fdopen(). Если имя "|-" или "-|", то происходит "расщепление" (fork) процесса на потомка и родителя.