LINUX.ORG.RU

Посоветую почитать книгу по перлу.

Вторая ссылка из гугла:
open (OUTPUTFILE, ">$output") or die ("Problem with opening $output: $!");
print OUTPUT "Whatever you want to add to the file"; close OUTPUT;

PS чем перл-то понравился? Ты много других языков знаешь/видел?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

> Посоветую почитать книгу по перлу.

Мне нужно коротко -- в идеале одним-двумя-тремя символами.

> PS чем перл-то понравился?

Регулярки у него удобные. Как на питоне будет s/([0-9])/$a[$1]/g ?

> Ты много других языков знаешь/видел?

Померятся захотелось? На: C++, java (эти знаю), pascal, D, haskell, lisp, js, sql, c#.

www_linux_org_ru ★★★★★
() автор топика
Ответ на: комментарий от true_admin

> PS чем перл-то понравился?

и еще удобно

do_something() if bla-bla-bla;

www_linux_org_ru ★★★★★
() автор топика

awk умеет делать > и >> в шелловском стиле. Перл вроде позиционировался как замена awk -- странно, что он такое не умеет просто записывать.

dilmah ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Мне нужно коротко

Ну коротко не значит лучше. Стремление ужать прогу до минимума часто приводит к тому что код понятен только автору.

> Как на питоне будет s/([0-9])/$a[$1]/g ?

Что такое $a? :) Завтра скажу как это точно делается, щас убегаю.

> Померятся захотелось?

боже упаси меряться. Просто интересно было отчего такой выбор. Я бы не отказался знать только один актуальный ЯП, но прогать на нём круче всех.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

>Что такое $a? :) Завтра скажу как это точно делается, щас убегаю.

не связывайся с ним, в одном из прошлых топиков всей толпой выясняли его прошлый примерчик из перла, в итоге все забили :)

stave ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Регулярки у него удобные. Как на питоне будет s/([0-9])/$a[$1]/g ?

dest = re.sub( '([0-9])', lambda m: a[m.group(0)], src )

Несколько сложнее, зато это не является частью языка и такой же синтаксис может предоставить другая библиотека.

dmage
()

м… не совсем понял, что именно требуется. простейший вывод в файл? http://search.cpan.org/~drolsky/File-Slurp-9999.13/lib/File/Slurp.pm

или перенаправить обычный вывод в файл? можно так:

open STDOUT, '>', $my_file_name or die; # или open STDOUT, '>>', $my_file_name or die;

после чего все print(f)/say будут выводить данные в файл с именем $my_file_name… и вообще, конкретнее пожалуйста, конкретнее =)

arsi ★★★★★
()
Ответ на: комментарий от stave

> не связывайся с ним, в одном из прошлых топиков всей толпой выясняли его прошлый примерчик из перла, в итоге все забили :)

dmage правильно перевел на питон :-)

www_linux_org_ru ★★★★★
() автор топика
Ответ на: комментарий от arsi

> и вообще, конкретнее пожалуйста, конкретнее =)

Ща подробнее напишу.

Что такое типовой шелловый скрипт (у меня)? Сижу в цикле, вызываю внешние программки (а вовсе не перловые модули!), парсю их выхлоп, решаю что делать, самый минимум арифметики. На bash-е реглярка, структуры управления и арифметика выглядит ужасно. Потому юзаю перл, где все хорошо, башевские конвееры и перенаправления юзаю вот так $a=`foo | bar 2>baz` ... но идилию нарушает желание сказать `echo $a > $outfile`. Это довольно глупо выглядит, $a надо предварительно экранировать. Хотелось бы в перле сказать $a ==> $outfile. И наоборот $b<==$infile. Понагляднее, попроще и не очень извращенно... хотя я даже соглашусь на фильтр.

www_linux_org_ru ★★★★★
() автор топика
Ответ на: комментарий от dmage

>dest = re.sub( '([0-9])', lambda m: a[m.group(0)], src )

Серьёзно? А проще никак?

KblCb ★★★★★
()
Ответ на: комментарий от dmage

> Несколько сложнее, зато это не является частью языка и такой же синтаксис может предоставить другая библиотека.

Хороший язык позволял бы библиотеке предоставлять краткий синтаксис. Как перегрузка operator << в плюсах например.

> dest = re.sub( '([0-9])', lambda m: a[m.group(0)], src )

Как записать перловые /"\\'\d'"/ с минимумом слэшей?

www_linux_org_ru ★★★★★
() автор топика
Ответ на: комментарий от true_admin

> Я бы не отказался знать только один актуальный ЯП, но прогать на нём круче всех.

Такой пока мне не известен. Как найду (или напишу) -- скажу.

www_linux_org_ru ★★★★★
() автор топика
Ответ на: комментарий от www_linux_org_ru

Какой "lisp"?

LISP 1.5? INTERLISP? MACLISP(Franz lisp? Spice Lisp?)? ELISP? NIL? T? Scheme? Emacs Lisp? PSL? Lisp Machine Lisp(он же ZetaLisp)? Common Lisp(cltl1? cltl2? ANSI?)? AutoLISP? Clojure? ISLISP? Newlisp? Arc? Dylan?

Все вместе? Гыгыгы.

guest-3484-2009
()
Ответ на: комментарий от www_linux_org_ru

> Как записать перловые /"\\'\d'"/ с минимумом слэшей?

Используя r'''...''' синтаксис:

re.search( r'''"\\'\d'"''', str )

Читабельности можно добавить при помощи re.X:

re.search( r"""
   "\\'\d'"
""", str, re.X )

dmage
()
Ответ на: комментарий от www_linux_org_ru

> Что такое типовой шелловый скрипт (у меня)? Сижу в цикле, вызываю внешние программки (а вовсе не перловые модули!), парсю их выхлоп, решаю что делать, самый минимум арифметики.

ну, если речь идёт о минимуме кода обработки, где запись 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, кстати, там есть много интересного ;) перл это, всё же, не замена шеллу, а скорее дополнение.

arsi ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Такой пока мне не известен.

Хочешь сказать все языки неактуальны? :)

true_admin ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> Slurp это делает. Но я хочу операааааатор...

Мама, купи мне мафыыынкууу

friday ★★★
()

вот, из одного довольно древнего краткого руководства. Фактически является переводом 'perldoc -f open', но насколько соответствует современной ее версии судить не берусь.

Если перед именем стоит символ '<' то файл открывается только на чтение (значение по умолчанию). Если '>' - на запись. Если '>>' - на добавление записей. '+>' или '+<' - файл открыт на чтение и запись одновременно. Если имя файла начинается с символа '|', то имя считается системной командой, на вход которой выводятся данные (поток). Имя '-' - стандартный вход (STDIN), '>-' - стандартный вывод (STDOUT). Функция возвращает true при успехе и false - неудаче.

Если имя (выражение) начинается с символов ">&", то остаток имени считается именем указателя файла, который открывается повторно. Символ '&' может стоять после '<', '>>', '+>', '+>>' и '+<'. Режим повторного открытия должен соответствовать первому. Выражение вида "<&=N" где N -число, эквивалентно системному вызову fdopen(). Если имя "|-" или "-|", то происходит "расщепление" (fork) процесса на потомка и родителя.

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.