Открылся новый сайт perlmeme.org (http://perlmeme.org/) для начинающих программировать на языке Perl. Представлены ответы на часто возникающие вопросы, заметки, описание конструкций с примерами кода, демонстрации кода для таких операций как сортировка, работа с БД, парсинг разных форматов и т.д.URL: http://perlmeme.org/
Новость: http://www.opennet.me/opennews/art.shtml?num=6185
Ну-у... сайт-то на английском :-(
На английском начинающим и Learning Perl почитать неплохо.
>Ну-у... сайт-то на английском :-(
>На английском начинающим и Learning Perl почитать неплохо.Прелесть ресурса в примерах, там можно не зная английский многим вещам научиться.
Нормально-нормально, не все же такие неучи как вы. А знание аглийского еще не означает однозначного знаня Perl'а... :)А то некоторые переводы, особенно для начинающих... :(( Таких переводчиков нужно убивать пока они еще маленькие. Сами бы попробовали чему-нибудь научиться по результатам своих творений. А потом люди думают, что программирование это страшно и ужасно...
Но это действительно страшно и ужасно... жалею что изучал программирование, а не искусство бонсай например =\
perl-то perlом, ему не убудет. Вот зачем 2 запятые пропустил? Разве так надо?
Жалей сначала, что не доизучал язык, на котором выражаешься:]
Там все примеры начинаются строкой #!/usr/bin/perl
Уж лучше с man perlintro начинать изучать Perl, там первая строка #!/usr/bin/env perl
Важно не то, что пишете в первой строке: это от типа shell зависит, а что пишете во второй и последующих.
То, что пишется в первой строке тоже важно. Perl пока что не является частью POSIX и поэтому совсем не обязательно должен находиться в /usr/bin. Хороший стиль программирование, в частности правильное написание первой строки, лучше выработать в себе изначально.
>/usr/bin. Хороший стиль программирование, в частности правильное написание первой строки, лучше
>выработать в себе изначально.Вам нужно на каждый запуск скрипта тратить ресурсы на запуск программы env ? Мне нет, поэтому всегда буду писать #!/usr/bin/perl
> Вам нужно на каждый запуск скрипта тратить ресурсы на запуск программы env ? Мне нет, поэтому всегда буду писать #!/usr/bin/perlМне нужны портабельные скрипты. На запуск программы env тратится примерно столько же ресурсов, как на запуск Hello world. При случае посмотрите её исходники. Не понимаю, почему многочисленные дистроклепатели не устанавливали perl в /usr/local/bin изначально. Если бы они так делали, не было бы сейчас никаких проблем писать #!/usr/local/bin/perl везде и всегда.
>Мне нужны портабельные скрипты. На запуск программы env тратится примерно столько же
>ресурсов, как на запуск Hello world. При случае посмотрите её исходники.Сами посмотрите, env по тупому пытается делать execv во всех "bin" директориях, и поверьте запуск из /usr/bin там не на первом месте. Загрузка от лишнего fork на этом фоне меркнет.
strace env blablabla 2> strace.log
$ grep exec strace.log |wc
28$ grep open strace.log |wc
37"Hello world" говорите ?
Я не знаю в какой системе вы это проверяли и почему в Вашем strace.log так много вызовов exec и open. Полагаю, что это проблема Вашей системы, а не Perl. Вот какие результаты я получил в FreeBSD 6.0-BETA5:> truss -o truss.out env aaaa
env: aaaa: No such file or directory
> cat truss.out
mmap(0x0,3600,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 671535104 (0x2806d000)
munmap(0x2806d000,0xe10) = 0 (0x0)
__sysctl(0xbfbfe728,0x2,0x28069998,0xbfbfe724,0x0,0x0) = 0 (0x0)
mmap(0x0,32768,(0x3)PROT_READ|PROT_WRITE,(0x1002)MAP_ANON|MAP_PRIVATE,-1,0x0) = 671535104 (0x2806d000)
issetugid() = 0 (0x0)
open("/etc/libmap.conf",0x0,0666) ERR#2 'No such file or directory'
open("/var/run/ld-elf.so.hints",0x0,00) = 4 (0x4)
read(0x4,0xbfbfe6f0,0x80) = 128 (0x80)
lseek(4,0x80,SEEK_SET) = 128 (0x80)
read(0x4,0x28072000,0x56) = 86 (0x56)
close(4) = 0 (0x0)
access("/lib/libc.so.6",0) = 0 (0x0)
open("/lib/libc.so.6",0x0,00) = 4 (0x4)
fstat(4,0xbfbfe730) = 0 (0x0)
read(0x4,0x280688e0,0x1000) = 4096 (0x1000)
mmap(0x0,880640,(0x5)PROT_READ|PROT_EXEC,(0x20002)MAP_NOCORE|MAP_PRIVATE,4,0x0) = 671567872 (0x28075000)
mprotect(0x28133000,4096,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mprotect(0x28133000,4096,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
mmap(0x28134000,20480,(0x3)PROT_READ|PROT_WRITE,(0x12)MAP_FIXED|MAP_PRIVATE,4,0xbf000) = 672350208 (0x28134000)
mmap(0x28139000,77824,(0x3)PROT_READ|PROT_WRITE,(0x1012)MAP_ANON|MAP_FIXED|MAP_PRIVATE,-1,0x0) = 672370688 (0x28139000)
close(4) = 0 (0x0)
sysarch(0xa,0xbfbfe7a0) = 0 (0x0)
mmap(0x0,344,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 672448512 (0x2814c000)
munmap(0x2814c000,0x158) = 0 (0x0)
mprotect(0x28075000,782336,(0x7)PROT_READ|PROT_WRITE|PROT_EXEC) = 0 (0x0)
mmap(0x0,22152,(0x3)PROT_READ|PROT_WRITE,(0x1000)MAP_ANON,-1,0x0) = 672448512 (0x2814c000)
munmap(0x2814c000,0x5688) = 0 (0x0)
mprotect(0x28075000,782336,(0x5)PROT_READ|PROT_EXEC) = 0 (0x0)
sigprocmask(0x1,0x28068820,0xbfbfe770) = 0 (0x0)
sigprocmask(0x3,0x28068830,0x0) = 0 (0x0)
execve("/sbin/aaaa",<missing argument>,<missing argument>)
execve("/sbin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/bin/aaaa",<missing argument>,<missing argument>)
execve("/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/sbin/aaaa",<missing argument>,<missing argument>)
execve("/usr/sbin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/bin/aaaa",<missing argument>,<missing argument>)
execve("/usr/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/games/aaaa",<missing argument>,<missing argument>)
execve("/usr/games/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/local/sbin/aaaa",<missing argument>,<missing argument>)
execve("/usr/local/sbin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/local/bin/aaaa",<missing argument>,<missing argument>)
execve("/usr/local/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/usr/X11R6/bin/aaaa",<missing argument>,<missing argument>)
execve("/usr/X11R6/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
execve("/home/user/bin/aaaa",<missing argument>,<missing argument>)
execve("/home/user/bin/aaaa",<missing argument>,<missing argument>) ERR#2 'No such file or directory'
write(2,0xbfbfe2b0,5) = 5 (0x5)
write(2,0xbfbfe2d0,4) = 4 (0x4)
write(2,0x2812d264,2) = 2 (0x2)
write(2,0xbfbfe2b0,26) = 26 (0x1a)
exit(0x7f)
process exit, rval = 32512Как видете, в наихудьшем случае количество вызовов execve() равно количеству путей в PATH и до /usr/local/bin можно добраться всего за 6 вызовов execve(). Я не вижу тут какого-то особенного использования ресурсов. Тоесть от использования env(1) гораздо больше пользы чем вреда. Поэтому рекомендации авторов perlintro вполне уместны и полезны. Повторяю, бардак с размещением perl устроен дистроклепателями. Вот пусть они с ним и разбераются - перемещают perl в /usr/local/bin или делают там симлмнк на него. Почему из-за них нормальные системы должны поддерживать нестандартное размещение программ?
Cтоп-стоп, а от куда ядро знает где команда env лежит ? Насколько я помню после #! по стандарту должен быть полный путь к интерпретатору, а env - это хак. Из огня да в полымя получается.
Как откуда? После #! полный к путь env как раз и прописывается:
#!/usr/bin/env perl
хе. а помните, какой флейм был зимой во freebsd-stable по поводу возможности выброса симлинка который /usr/bin/perl by default?если не помните -- рекомендую почитать. там и статистика по перл-скриптам и то, насколько древнее каждое из выражений (perl vs sh vs env) и много чего интересного.
начать можно отсюда: http://lists.freebsd.org/pipermail/freebsd-perl/2005-January...
жаль что на русском таких вещей малова-то. Буквально недавно наткнулся на подобное, но вот незадача - отсканировали книжку с кучей сиволов, смотришь в примеры и ужасаешся толи это регулярное выражение, толи плохо распознаные сиволы, всё таки на буржуйском читать гораздо приятнее.
> жаль что на русском таких вещей малова-то.
> Буквально недавно наткнулся на подобное, но вот
> незадача - отсканировали книжку с кучей сиволов,
> смотришь в примеры и ужасаешся толи это гулярное > выражение, толи плохо распознаные сиволы, всё
> таки на буржуйском читать гораздо приятнее.Здравствулте!
(Hello)
Мы смотрим для людей имеют хорошее вникание английского и русского. Мы хотим перевести некоторые из наших страниц на http://www.perlmeme.org в другие языки, such as русский, Отношения,
Портной Simon
(We are looking for people who have a good understanding of English and Russian.
We want to translate some of our pages at
http://www.perlmeme.org into other languages,
such as Russian,Regards,
Simon Taylor)
simon@unisolve.com.au
А почему бы, господа, хая переводчиков самим не примкнуться к переводчикам? Время тратить жалко видимо. Так вот пока толковые люди не будут уделять подобным проектам внимания так оно и будет. Ситуация с ошибками в переводе помню натыкался и в c++, правда есть такая мудрость у писателей подобных обучающих программингу материалов - спецом давать грабли, чтобы чердак слетал и кругом шел и тема усваивалась.