Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по Hash::Util, непонятные символы < 
:(
    Опции темы
ginnie
Дата 16.10.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемые коллеги!

Сегодня смотрел код в модуле Hash::Util и натолкнулся на непонятные конструкции, типа

Код

use Scalar::Util < qw(reftype);


Код

sub lock_ref_keys {
    my($hash, < @keys) = < @_;


Код

my %original_keys = %( < map { ($_ => 1) } keys %$hash );


Кто-нибудь знает, что это (я имею ввиду символ <)?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
amg
Дата 16.10.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Есть предположение, что это фишка Perl 5.10, причем, похоже, недокументированная (в perlop). По крайней мере, в аналогичном модуле последнего Perl 5.8 ничего такого нет.
PM MAIL   Вверх
arto
Дата 16.10.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



а perldoc -m что говорит?
PM MAIL ICQ   Вверх
KSURi
Дата 16.10.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Код

Internals::SvREADONLY $hash->{$key}, 0;

Оттуда же. Получается XS вызов из PP сорца. Прикольно.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 16.10.2008, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



arto, у меня perl 5.8.8, поэтому модуль Hash::Util v0.05 (там все нормально). Последняя версия модуля 0.07 (именно в ней непонятные символы), но она для perl 5.10.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 16.10.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Кстати непонятно почему в начале модуля нет вызова
Код

require 5.0010;

если это фишки 5.10 версии


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
arto
Дата 16.10.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# perldoc -m Hash::Util | grep "use Scalar::Util"
use Scalar::Util qw(reftype);
# perl -v

This is perl, v5.10.0 built for i386-linux-thread-multi
...
#

ps. главное -- не умереть от опечатки в медицинском справочнике.
PM MAIL ICQ   Вверх
ginnie
Дата 16.10.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



KSURi, где Вы увидели "XS вызов"? Там вызов метода SvREADONLY из модуля Internals (кто-же виноват, что в модуле он транслируется в вызов XSUB  smile ).

Добавлено @ 16:03
arto, т.е. опечатка на CPAN? Какая у Вас версия модуля?

Это сообщение отредактировал(а) ginnie - 16.10.2008, 16:05


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
arto
Дата 16.10.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



да

# perl -MHash::Util -le 'print $Hash::Util::VERSION'
0.07

PM MAIL ICQ   Вверх
KSURi
Дата 16.10.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Цитата(ginnie @  16.10.2008,  16:02 Найти цитируемый пост)
KSURi, где Вы увидели "XS вызов"? Там вызов метода SvREADONLY из модуля Internals (кто-же виноват, что в модуле он транслируется в вызов XSUB  smile ).

Я думаю смысл выражения был понятен, незачем к словам придираться. В модулях стандартной поставки perl 5.8 не было такой обертки для XS вызовов.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 16.10.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



KSURi, честно говоря я, когда увидел эту функцию в других модулях, подумал, что это из модуля http://search.cpan.org/author/STBEY/Intern....1/Internals.pm, но оказалось, что это не так. Более подробной информации пока не нашел.

P.S. Кое-что нашел (файл universal.c):

Код

newXSproto("Internals::SvREADONLY",XS_Internals_SvREADONLY, file, "\\[$%@];$");

XS(XS_Internals_SvREADONLY)    /* This is dangerous stuff. */
{
    dVAR;
    dXSARGS;
    SV * const sv = SvRV(ST(0));
    PERL_UNUSED_ARG(cv);

    if (items == 1) {
     if (SvREADONLY(sv))
         XSRETURN_YES;
     else
         XSRETURN_NO;
    }
    else if (items == 2) {
    if (SvTRUE(ST(1))) {
        SvREADONLY_on(sv);
        XSRETURN_YES;
    }
    else {
        /* I hope you really know what you are doing. */
        SvREADONLY_off(sv);
        XSRETURN_NO;
    }
    }
    XSRETURN_UNDEF; /* Can't happen. */
}


Код

perl -e 'print $_, $/ for (keys %Internals::);'

SvREFCNT
hv_clear_placeholders
hash_seed
SvREADONLY
HvREHASH
rehash_seed



Это сообщение отредактировал(а) ginnie - 16.10.2008, 17:43


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 16.10.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



А вот это уже интересно. Спасибо за информацию.

Добавлено через 2 минуты
Если бы это был модуль с CPAN'a, то для него надо было делать use, которого там не было.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.