- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
sub serialize {
my ($obj) = @_;
my $result;
my $ref = ref $obj;
if ($ref eq 'HASH') {
$result = sprintf '{ %s }', join(', ', map { qq/"$_": / . serialize($obj->{$_}) } keys %$obj);
} elsif ($obj eq 'ARRAY') {
$result = sprintf '[ %s ]', join(', ', map { serialize($_) } @$obj);
} elsif (! $ref) {
if (!defined $obj) {
$result = 'null';
} elsif ($obj =~ /^ -? (?:0|[1-9]\d*) (?:\.\d+)? (?:[eE][+-]?\d+)? $/x) {
$result = $obj;
} else {
$obj =~ s/(["\\])/\\$1/g;
$obj =~ s/\r/\\r/g;
$obj =~ s/\n/\\n/g;
$obj =~ s/\t/\\t/g;
$result = qq/"$obj"/;
}
}
return $result;
}
... или как там
http://search.cpan.org/~makamaka/JSON-2.90/lib/JSON.pm
и перловщики (как и многие другие разработчики языков программирования) тоже пидарасы, потому что считают что из коробки библиотеки должны читатся только из стандартных каталогов, и ни откуда иначе.
я ходил по тем же граблям, когда мне профи сказали что, что бы мне как обычному пользователю можно было поставить без рута модуля с CPAN'а, все что мне нужно это поставить как рут один модуль с CPAN'а.
можно конечно ручками менять `@INC` (пути к либам), но это все обложено другой пачкой граблей, потому что `use` (подключение либы) обламывается уже на стадии компиляции, до того как код получил шанс на файловой системе найти либы.
единственный работающий вариант это патчить скрипты при "инсталяции". что означает что нужно еще инсталяцию прикрутить - вместо простого "распакуй в каталог и пользуйся".
и в конце концов, это же перл. на перле перл перлить и переперливать, это даже за экзотику не считается. а вы тут со своим шеллом. :)
Если вы не можете поставить либу и пишите ее сами, то это лютейший пиздец
когда мне это было нужно, там как раз и была проблема что $HOME переопределялся на рабочий каталог софтины бегущей на серваке - и в этот каталог текущий пользователь писать не мог.
А проект вместо изучения новых технологий и фана превратится в боль в жопе, копание в засохшем говне типа пыхи 5.2 и борьбу с анальными ограничениями хостинга... Ничем хорошим это не кончается.
Изучать можно и у себя на локальной машине. А для тех вещей, где надо, чтобы работало, можно один раз написать на старом анальном и забыть.
Но если это творческий проект, дело всей жизни, текущая река мыслей и бесконечное число правок, то да, можно не ограничиваться.
- Опыт? Да нахуй мне этот опыт работы с пыхой сдался, и без того хватает...
- Фан? Да какой там фан...
- Авторитет? Подумаешь, написал простейшего паука на пыхе и апи к нему. Это может любой.
- Деньги? Само собой нет.
- Пользу? Да не особо. Сток редко переполняется, можно просто перетерпеть.
Отсюда вывод: закопать мысль о бесконечном стоке подальше, и заняться чем-то другим, что хоть по какому-то из этих 5 параметров будет в плюсе.
Именно так это бы и закончилось, если бы я ориентировался на бесплатный хостинг.
Сейчас не начало нулевых, хвала Аллаху, когда у меня был выбор: шаред хостинг за 15 долларов или ставить свой комп на колокейшен за 200. И конечно я выбирал шаред хостинг, и конечно тупые админы имели там устаревшую версию пхп без нужных мне модулей, неправильную базу, и mail у них не работал, и иногда проще было на перле cgi написать, потому что перл у админов обычно был лучше настроен.
Сейчас я могу взять VPS на амазоне где я буду рутом и сам поставлю там хоть брейнфак. Так что цена хостинга не может являться оправданием для неиспользования готовых хороших либ.
Да, я смотрю, тут богатеи собрались, для которых проще постоянно платить, чем один раз чуть подпилить под себя код.
Какая-то ложная оптимизация усилий выходит. То программисты скрипт для единственной задачи пишут дольше, чем выполняется задача, то один раз пишут на любимом языке, чтобы потом лет пять платить.
> один раз подпилить код
А потом еще раз другой код. А потом еще. И еще. И вот ты уже профессиональный пехепешник, который ютится на бесплатных говнохостингах и кроме них больше ничего не изучил...
> в конце-концов <...> не только <...> но и <...>
А может я - жадный школьник. По мне - так лучше покупать то, что считаешь нужным купить. И в этом случае, скажем, 50 рублей за пачку сигарет мне как некурящему представляется в образе сундука с пиратским золотом, а 3000 рублей за жёсткий диск - всего ничего.
Вот у Вас ещё и дополнительные полезные возможности имеются, ради которых можно и заплатить.
> А потом еще раз другой код. А потом еще. И еще
Ну тут баланс нужен. Скажем, в бесконечный сток надо один раз добавить разбиение на странице, пару раз исправить какие-то глупые баги, а потом оставить его до тех пор, пока либо ГК, либо браузеры не изменятся. Проект по сути пассивный, это не Википедия и не поисковик, тут идея и алгоритмы уже достигли идеала.
Если надо писать постоянно, это уже немного другая ситуация, там другие приоритеты.
P.S. Кстати, а бесплатные пыхохостинги дают крон и исходящие коннекты?
Другие популярные не дают.
Хероку, когда я с ним игрался, только рельсы умел. ДвигательПриложений не пробовал, тут ничего не скажу.
Опыт: познакомился с такими няшками как flask, sqlalchemy, wsgi, lxml; слегка подкачал знания nginx, postgres, html5, angular.js и python.
Фан: это было весело и интересно.
Авторитет: по крайней мере не стыдно показать друзьям.
Деньги: -5$/месяц.
Польза: изредка юзаю сервис, когда основной сток переполнен; годная VPS в придачу.
для этого BEGIN блок придумали:
я это делал пару раз. в дереве версий 2/3 изменений страданиями в этом BEGIN {} блоке и занимались. потому что всегда что-то надо было допиливать в логике нахождения где же эти грёбаные либы лежат.
на практике проще скрипты патчить. ищешь строки с `use lib` (потому что `push @INC` это не кошерно), ищешь либы, патчишь пути к либам в `use lib`ах.
Этот скрипт ни разу не для веба (JSON, калазось бы). Просто запихивает нужные данные файл в нужном формате. Чтоб человек потом мог обратиться с этим файлом в /dev/null автоматизированную поддержку.
Так что каждый раз напрягать юзера "а установи-ка JSON.pm" не вариант.