Имя:    Пароль:      Помнить меня       
Unsorted   ~  Software  ~  Development and Design  ~  Помощь по Perl
На страницу «  1, 2
inkognit
Сообщение  14 Ноя 2009, 15:24  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
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 раз

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Личное Сообщение : E-mail
inkognit
Сообщение  16 Ноя 2009, 23:50  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
C нами с 30.04.2006
Репутация: 77.5

NarWhal, +100!
А что уж говорить о реализации bbcode на perl - с его-то возможностями работы с регулярными выражениями...
Чем писать огромный preg_replace() на PHP куда проще написать
$text =~ s/(\s)/\\\1/g; # экранирование пробельных символов.

Кстати, из-за вышенаписанной крякозябры Perl'a и боятся новички... )

Ладно, это уже походит на слащавую ностальгию сишников. Я прекращаю расписывать плюсы Perl. Улыбочка

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
Dreamer
Сообщение  17 Ноя 2009, 0:12  Ссылка : Ответить с цитатой
Возраст: 43 Пол: Мужской 
C нами с 07.02.2005
Репутация: 122.9

На мой взгляд еще одним критерием сравнения должна стать востребованность. Например, поиск на hh при слове perl дает 220 вакансий, и значительная часть из них не требует обязательных знаний, а вот php встречается 572 раза и вакансии ближе к разработке в среднем. Выходит что-то вроде мастодонта, сильный, мощный и не особо нужный.

_____________________________
Chi wa mizu yori mo koshi
В начало
Профиль : Блог : Личное Сообщение
NarWhal
Сообщение  17 Ноя 2009, 0:38  Ссылка : Ответить с цитатой
Возраст: 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 и станет полноценным под конкретные задачи спецом.

В общем, я бы не стал так уж сразу выводы делать, что более востребовано. Улыбочка
В начало
Профиль : Фотоальбом : Личное Сообщение
Вовчик
Сообщение  17 Ноя 2009, 1:10  Ссылка : Ответить с цитатой
Пол: Мужской 
C нами с 23.07.2006
Репутация: 56.4

inkognit, извините в исходных кодах я совсем не разбираюсь, так кое что подправить необходимо, а где - это спецу необходимо смотреть...
В начало
Профиль : Личное Сообщение
Dreamer
Сообщение  17 Ноя 2009, 1:22  Ссылка : Ответить с цитатой
Возраст: 43 Пол: Мужской 
C нами с 07.02.2005
Репутация: 122.9

NarWhal, везде есть постоянная нехватка квалифицированных спецов. Да, PHP проще в освоении, и зарплаты у них ниже, но все же покопавшись по объявлением складывается примерно такая картина, либо ты кто-то уже и еще немного перла не помешает, либо ты нужен именно из за Perl и окладу сразу тебе в разы больше. Но тогда квалификация должна быть на уровне. Такого можно и уговорами позавлекать) В случае PHP конечно мест линуховых админов и работников всяких поддержек предлагают меньше, но выращивать спецов любят больше из них. И не в последнюю очередь из за простоты. А программисты явы это, уж извините, лига повыше)

_____________________________
Chi wa mizu yori mo koshi
В начало
Профиль : Блог : Личное Сообщение
inkognit
Сообщение  17 Ноя 2009, 1:49  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
C нами с 30.04.2006
Репутация: 77.5

Вот и начался Holy War... )

Dreamer, вы что хотите доказать? Что на PHP сейчас делают все и вся? Да, так и есть.
К пунктам, перечисленным моим коллегой NarWhal, добавлю, что после выхода apache2 разработчики оного долго отказывались интегрировать в свой продукт mod_perl, ссылаять на якобы "сырость" продукта, что сильно способствовало продвижению PHP на рынок.
Поймите главное. PHP - это язык для написания сайтов. Perl - это язык для работы с текстом. Вы чувствуете разницу? Perl находит применение почти на всех крупных серверах вовсе не потому, что там генератор веб-страниц на нем написан, а благодаря его функционалу для управления системой.
У языков просто разная сфера применения. Так что мы с вами сейчас сравниваем зеленое с длинным.

Вовчик, я имел в виду - могу я получить "архив файлов с вашего сайта" дабы ознакоиться с устройством "сайта, написанного на Perl"?

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
Dreamer
Сообщение  17 Ноя 2009, 2:46  Ссылка : Ответить с цитатой
Возраст: 43 Пол: Мужской 
C нами с 07.02.2005
Репутация: 122.9

Я ничего не хочу доказать и это не холивар вовсе. Разве что высказал предположение что он менее востребован, и что лучше быть профи пусть в одной технологии, чем спецом широкого профиля посредственного качества, честно сказать придерживаюсь подобного и сейчас. Вопросы различий, плюсов-минусов, сферы применений мне вполне известны и понятны.

_____________________________
Chi wa mizu yori mo koshi
В начало
Профиль : Блог : Личное Сообщение
inkognit
Сообщение  17 Ноя 2009, 2:48  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
C нами с 30.04.2006
Репутация: 77.5

Кстати, любопытный факт...
Почему-то в последнее время, если я задаю вопрос на каком-нибудь форуме, а потом (где-то через денек-другой) пытаюсь прогуглить решение - форум с моим вопросом оказывается на первой странице... Что у меня за карма такая, а?
Вот сейчас пытался прогуглить по-русски "perl Exporter"... Думаю... Вкуриваю...
Сорри за оффтоп. )

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
inkognit
Сообщение  17 Ноя 2009, 17:15  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
C нами с 30.04.2006
Репутация: 77.5

Dreamer, честно - не понял вашего последнего поста. То ли я русским плохо владею, та ли вы как-то не так пишите, но не понял.
Плюсы-минусы известны, и это хорошо. Не холивар - так еще лучше. )

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
seb
Сообщение  18 Ноя 2009, 2:23  Ссылка : Ответить с цитатой
Возраст: 44 Пол: Мужской  Доверенный пользователь
C нами с 05.04.2005
Репутация: 121.1

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
В начало
Профиль : Фотоальбом : Личное Сообщение : JabberID
inkognit
Сообщение  19 Ноя 2009, 22:32  Ссылка : Ответить с цитатой
Возраст: 33 Пол: Мужской 
C нами с 30.04.2006
Репутация: 77.5

Вот писал утилиту для наложения патчей и создания бэкапов, да наткнулся на плевую, казалось бы, проблему...
В общем, надо мне при выходе из программы выполнять одну очень важную функцию, которая сохраняет результат работы программы. Пытался решить этот вопрос так:
sub quit {
	SavePatcherVars;
	exit 0;
}

Однако выполнение программы после выполнения этой функции не прекращается.

В доках же ясно сказано...
Цитата:
exit - Завершение работы программы.


Так что не могу понять в чем, собственно, казус...
Никто не знает в чем дело?

Добавлено спустя 10 минут 51 секунду:

Маленькая деталька...
Функция quit определена в модуле PatcherEngine и расшарена Exporter'ом.
Если описать функцию в теле основного скрипта - выходит нормально, однако она все же относится к модулю, и надо ее включить в него.
Вопрос в следующем: Есть ли способ описать выше обозначенную функцию в модуле, и почему не работает текущий вариант функции?

_____________________________
Дайте в руки мне баян, я порву его совсем.
В начало
Профиль : Фотоальбом : Блог : Личное Сообщение : E-mail
NarWhal
Сообщение  28 Ноя 2009, 2:26  Ссылка : Ответить с цитатой
Возраст: 45 Пол: Мужской 
C нами с 03.03.2006
Репутация: 100.4

inkognit, всё дело именно в том, что функция определена в модуле. То что ты ее преопределяешь экспортером данный факт не отменяет. И именно поэтому exit не работает "как надо", не влияя на дальнейшую работу основного скрипта.

Видимо, такое поведение обусловлено тем, что exit перед завершением вызывает деструкторы всех загруженных модулей и созданных объектов.

Сам не проверял, но, возможно, проблему решит использование _exit стандартного модуля POSIX, которая как раз и отличается тем, что завершает работу без каких-либо предварительных действий.
use POSIX;
  . . .
POSIX:_exit 0;

Попробуй, авось прокатит Подмигивание
В начало
Профиль : Фотоальбом : Личное Сообщение
Показать сообщения:   
На страницу «  1, 2

Unsorted   ~  Software  ~  Development and Design  ~  Помощь по Perl

Ответить на тему

Перейти:  





Powered by phpBB   © Unsorted Team  support@unsorted.me  promo@unsorted.me  Полезные скрипты