|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
Помощь по Perl и иже с ним.
Ребята, никак не могу разобраться с областью видимости.
Дело стоит так.
Есть 2 файла - string.pl и lang.pl
string.pl:
#!/usr/bin/perl
require 'lang.pl';
our $DEBUG = 0;
# my string functions
our sub println {
print shift()."\n";
}
sub empty {
return 1 if ($_[0] eq '') || ($_[0] == 0);
return 0;
}
sub err {
return lang('Internal error!') if empty $DEBUG;
return shift;
}
println err lang('Booooo!');
|
lang.pl
#!/usr/bin/perl
our %lang;
$lang{'Internal error!'} = 'Internal error!';
our sub lang {
return $_[0];
}
1; |
Так вот, вышенаписанный код работает хорошо. Однако если опускать скобки при функции lang() - интерпретатор жалуется, что функция еще не определена.
Подскажите, что я делаю неправильно? Есть ведь у нас perl-программисты, да?
|
Последний раз редактировалось: inkognit (16 Ноя 2009, 23:52), всего редактировалось 1 раз
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
NarWhal, +100!
А что уж говорить о реализации bbcode на perl - с его-то возможностями работы с регулярными выражениями...
Чем писать огромный preg_replace() на PHP куда проще написать
$text =~ s/(\s)/\\\1/g; # экранирование пробельных символов. |
Кстати, из-за вышенаписанной крякозябры Perl'a и боятся новички... )
Ладно, это уже походит на слащавую ностальгию сишников. Я прекращаю расписывать плюсы Perl.
|
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 44 C нами с 07.02.2005 Репутация: 122.9
|
|
На мой взгляд еще одним критерием сравнения должна стать востребованность. Например, поиск на hh при слове perl дает 220 вакансий, и значительная часть из них не требует обязательных знаний, а вот php встречается 572 раза и вакансии ближе к разработке в среднем. Выходит что-то вроде мастодонта, сильный, мощный и не особо нужный.
|
_____________________________ Chi wa mizu yori mo koshi
|
|
|
|
|
|
|
Возраст: 45 C нами с 03.03.2006 Репутация: 100.4
|
|
Dreamer, не стал бы делать столь поспешные выводы.
1) Да, количественно php более востребован. Возьмём всё тот же hh: 572/220 вакансий. Однако, рынок труда это не только предложения работодателя, но и набор специалистов на эти вакансии. А тут мы видим соотношение 4612/1299. И, как итог, более детальный взгляд даёт уже обратную картину: более востребован как раз perl, почти в полтора раза.
2) Сейчас только ленивый не мнит себя знатоком PHP. Perl, наряду с этим, вообще не изучается в каких-либо заведениях, являясь эдаким пережитком прошлого. Но всё много прозаичнее. В школах преподавали Бейсик а не С именно из-за доступности первого и лёгкости в обучении. Та же история и в нашем сравнении. PHP проще в своих основах, дающих результат, который можно "пощупать". Это не значит что он плохой, я такого ни в коем случае не говорю. В итоге, среднее качество "специалистов" не слишком высоко и из этого следует следующий пункт...
3) Сравните предлагаемые зарплаты программиста PHP и Perl. Естественно, в каждом случае всё зависит от уровня знаний и прочих сопутствующих. Но, при прочих равных, вторые получают в 2-3 раза больше. ( А программисты Java ещё более затратные ).
4) Могу по личному опыту сказать, что в Москве постоянно есть нехватка perl-специалистов. Постоянно. И если крупные конторы гоняются за готовым продуктом ( HR mail.ru от меня полгода звонками и уговорами завлекали ), то многие мелкие готовы брать полуфабрикат, который за 3 месяца испытательного срока поднатореет в perl и станет полноценным под конкретные задачи спецом.
В общем, я бы не стал так уж сразу выводы делать, что более востребовано.
|
|
|
|
|
|
|
|
C нами с 23.07.2006 Репутация: 56.4
|
|
inkognit, извините в исходных кодах я совсем не разбираюсь, так кое что подправить необходимо, а где - это спецу необходимо смотреть...
|
|
|
|
|
|
|
|
Возраст: 44 C нами с 07.02.2005 Репутация: 122.9
|
|
NarWhal, везде есть постоянная нехватка квалифицированных спецов. Да, PHP проще в освоении, и зарплаты у них ниже, но все же покопавшись по объявлением складывается примерно такая картина, либо ты кто-то уже и еще немного перла не помешает, либо ты нужен именно из за Perl и окладу сразу тебе в разы больше. Но тогда квалификация должна быть на уровне. Такого можно и уговорами позавлекать) В случае PHP конечно мест линуховых админов и работников всяких поддержек предлагают меньше, но выращивать спецов любят больше из них. И не в последнюю очередь из за простоты. А программисты явы это, уж извините, лига повыше)
|
_____________________________ Chi wa mizu yori mo koshi
|
|
|
|
|
|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
Вот и начался Holy War... )
Dreamer, вы что хотите доказать? Что на PHP сейчас делают все и вся? Да, так и есть.
К пунктам, перечисленным моим коллегой NarWhal, добавлю, что после выхода apache2 разработчики оного долго отказывались интегрировать в свой продукт mod_perl, ссылаять на якобы "сырость" продукта, что сильно способствовало продвижению PHP на рынок.
Поймите главное. PHP - это язык для написания сайтов. Perl - это язык для работы с текстом. Вы чувствуете разницу? Perl находит применение почти на всех крупных серверах вовсе не потому, что там генератор веб-страниц на нем написан, а благодаря его функционалу для управления системой.
У языков просто разная сфера применения. Так что мы с вами сейчас сравниваем зеленое с длинным.
Вовчик, я имел в виду - могу я получить "архив файлов с вашего сайта" дабы ознакоиться с устройством "сайта, написанного на Perl"?
|
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 44 C нами с 07.02.2005 Репутация: 122.9
|
|
Я ничего не хочу доказать и это не холивар вовсе. Разве что высказал предположение что он менее востребован, и что лучше быть профи пусть в одной технологии, чем спецом широкого профиля посредственного качества, честно сказать придерживаюсь подобного и сейчас. Вопросы различий, плюсов-минусов, сферы применений мне вполне известны и понятны.
|
_____________________________ Chi wa mizu yori mo koshi
|
|
|
|
|
|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
Кстати, любопытный факт...
Почему-то в последнее время, если я задаю вопрос на каком-нибудь форуме, а потом (где-то через денек-другой) пытаюсь прогуглить решение - форум с моим вопросом оказывается на первой странице... Что у меня за карма такая, а?
Вот сейчас пытался прогуглить по-русски "perl Exporter"... Думаю... Вкуриваю...
Сорри за оффтоп. )
|
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
Dreamer, честно - не понял вашего последнего поста. То ли я русским плохо владею, та ли вы как-то не так пишите, но не понял.
Плюсы-минусы известны, и это хорошо. Не холивар - так еще лучше. )
|
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 44 C нами с 05.04.2005 Репутация: 121.2
|
|
Silicoid, на perl можно писать как на C, обратится к результату вызова функции:
perl -e 'sub foo { return (1,2,3); } print ((foo)[1], "\n");'
2
perl -e 'sub foo { return [1,2,3]; } print foo->[1], "\n";'
2
|
а на php не поддерживается, придётся через временную переменную
php -r 'function foo() { return array(1,2,3); } print (foo()[1]);'
Parse error: syntax error, unexpected '[' in Command line code on line 1 |
|
_____________________________ IRC WeNet #programming
jid: seb2000@jabber.ru
|
|
|
|
|
|
|
Возраст: 34 C нами с 30.04.2006 Репутация: 77.5
|
|
Вот писал утилиту для наложения патчей и создания бэкапов, да наткнулся на плевую, казалось бы, проблему...
В общем, надо мне при выходе из программы выполнять одну очень важную функцию, которая сохраняет результат работы программы. Пытался решить этот вопрос так:
sub quit {
SavePatcherVars;
exit 0;
}
|
Однако выполнение программы после выполнения этой функции не прекращается.
В доках же ясно сказано...
Цитата: |
exit - Завершение работы программы.
|
Так что не могу понять в чем, собственно, казус...
Никто не знает в чем дело?
Добавлено спустя 10 минут 51 секунду:
Маленькая деталька...
Функция quit определена в модуле PatcherEngine и расшарена Exporter'ом.
Если описать функцию в теле основного скрипта - выходит нормально, однако она все же относится к модулю, и надо ее включить в него.
Вопрос в следующем: Есть ли способ описать выше обозначенную функцию в модуле, и почему не работает текущий вариант функции?
|
_____________________________ Дайте в руки мне баян, я порву его совсем.
|
|
|
|
|
|
|
Возраст: 45 C нами с 03.03.2006 Репутация: 100.4
|
|
inkognit, всё дело именно в том, что функция определена в модуле. То что ты ее преопределяешь экспортером данный факт не отменяет. И именно поэтому exit не работает "как надо", не влияя на дальнейшую работу основного скрипта.
Видимо, такое поведение обусловлено тем, что exit перед завершением вызывает деструкторы всех загруженных модулей и созданных объектов.
Сам не проверял, но, возможно, проблему решит использование _exit стандартного модуля POSIX, которая как раз и отличается тем, что завершает работу без каких-либо предварительных действий.
use POSIX;
. . .
POSIX:_exit 0;
|
Попробуй, авось прокатит
|
|
|
|
|
|
|
|