nataraj: (Default)
Scalar::Util
       dualvar NUM, STRING
           Returns a scalar that has the value NUM in a numeric context and the value STRING in a string context.

               $foo = dualvar 10, "Hello";
               $num = $foo + 2;                    # 12
               $str = $foo . " world";             # Hello world


Господи! Это каких же глюков можно наловить!

PS: Там еще в конце забавно: The weaken and isweak subroutines in this module and the patch to the core Perl were written in connection with the APress book ‘Tuomas J. Lukka’s Definitive Guide to Object-Oriented Programming in Perl’, to avoid explaining why certain things would have to be done in cumbersome ways.
nataraj: (Default)
Перловый скрипт с очень длинным циклом постепенно съедает доступную память... В памяти я вроде ничего не храню, все пишу в файлы. Все переменные пересоздаются заново в теле цикла. Даже файловые дискрипторы не храню, всякий раз открываю/закрываю... Тем ни менее память постепенно съедается и к утру наверное съестся вся... Что плохо для соседей...

Где она еще может естся? внутри глобальных переменных модулей? Попробовать занести внутрь цикла часть use'ов а в конце цикла сказать им "no"? Это поможет, если дело в этом?

Я конечно могу сохранить список в файл и пятьсот раз запустить этот скрипт с обработкой по сколько-то тысяч записей, это наверное спасет от утечки... Но как-то это как минимум не спортивно
nataraj: (Default)
Берем простой пример

use XML::LibXML;                                                                                                                                             
                                                                                                                                                             
my $xml = "<test some_attr='bbbbb'/>";                                                                                                                       
my $parser = XML::LibXML->new();                                                                                                                             
                                                                                                                                                             
my $doc = $parser->parse_string($xml);                                                                                                                       
print $doc->toString;

Выводит он все тоже самое, но атрибут в двойных кавычках....

Кто-нибудь что-нибудь осмысленное знает про сохранность кавычек при прогонке xml'я через libxml2 ? Это вообще возможно?

А то поменял скриптом в файле какую-то ерунду, а diff больше самого файла... Неаккуратненько...

perl

Dec. 2nd, 2010 06:52 pm
nataraj: (Default)
Если ненароком поймать undef в спиочный контекст а потом проверить истинность полученного, то оно оказывается истинно... список то не пустой!
nataraj: (Default)
Вчера на пару с коллегой раскопали антикварные перловые грабли:
Коллега написал демона который должен был висеть на заданном порту и отвечать... Не будучи демонизированным демон работал совершенно штатно, отвечая на тестовые запросы. Но будучи демонизированным работать отказывался ссылаясь на ошибку внутри utf8_heavy.pl. На этом этапе к работе приступил я, как наименее загруженный. Путем добавления тестового ввода была локализована строка которая генерила ошибку. Строкой оказался банальный tr///; только с русскими, и как следствие, уникодными буквами внутри... В результате более подробного гугления выяснилось что у перла 5.8.8 есть особенность реализации, которая приводит к таким ошибкам при выполнении операции tr/// с уникодными буквами, в случае если процесс работает в thread'е
http://rt.perl.org/rt3/Public/Bug/Display.html?id=41124
По результатам Net::Daemon'у при создании было дополнительно сказано mode=>'fork' и все заработало.
Прекрасные антикварные грабли!
nataraj: (Default)
Надо сделать копию объекта, чтобы не поганить оригинал изменениями...

Можно сделать
my $copy = {%{$orig}};
но это как-то сильно wirte-only, даже если комментарием сопроводить...

Нет ли случайно какой-то спецфункции позволяющией клонировать объект, о которой я не знаю?
Чтобы можно было сказать что-то вроде
my $copy = clone $orig;
nataraj: (Бритый небритый)
Хочу очень простой вещи: разделить строку на части, при этом разделители многосимвольные, похожи, но отличаются на пару символов друг от друга... Хочется нечто вроде

my $s="111 =aa= 222 =bb= 333 =cc= 444";
print join "\n", split(/=(aa|bb|cc)=/, $s);

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

Теоретически можно написать split /=aa=|=bb=|=cc=/, $s
и тогда все будет. Но это только в примере выглядит коротко... В жизни так писать не хотелось бы.

Научить сплит не включать зоны группировки в результат кажется невозможно... Можно ли как-то без круглых скобок намекнуть регекспу что знак равенства уже не часть альтернативы, а следующий за альтернативой символ?
nataraj: (Бритый небритый)
Разобрался как XSD-валидировать XML'ки через перл... Read more... )

Profile

nataraj: (Default)
Swami Dhyan Nataraj

September 2017

S M T W T F S
     12
345 6789
10111213141516
1718 1920212223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 11:42 am
Powered by Dreamwidth Studios