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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите новичку, разбор скрипта, ч1 
:(
    Опции темы
7183847
Дата 17.8.2019, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день

Помогите новичку разобрать скрипт

Заранее прошу за качество оформления кода - распознал из книги.

Код не большой, все понятно кроме 2х моментов:

"'action' =>sub {" - в книгах я читал, что процедура описывается отдельно в коде типа sub имя {}, а потом вызывается как &имя, а тут что то не понятное, что это и как это работает?

и в последней процедуре не понятен этот код: 
"foreach my $issue (@{ $actions($event_type}}) {
&(Sissue>(action}}($event);" - не могу понять что этот код делает

Код

#/usr/bin/perl
use strict;
my $event;
my %actions (
'EXCP' =>[
{
'action' =>sub {
my ($event) = @_;
my ($garbage, $context) = split /Descr ='/, $event;
my ($descr, $garbage) = split/'/, $context;
$descr= s/l'/g;
$descr = s/\s+/ /g;
print "EXCP Descr $descrin" if $descr;
},},]);

while (<>) {
$event=process_event($event) if /^\d\d:\d\d\.\d+/;
$event.= $_;

sub process_event($) {
my ($event) = @_;
return unless $event;
foreach my $event type ( keys %actions ) {
next unless $event =~ /^[^,]+,$event_type,/;
foreach my $issue (@{ $actions($event_type}}) {
&(Sissue>(action}}($event);
}
}
}



PM MAIL   Вверх
arto
Дата 19.8.2019, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1. в данном случае ссылка на безымянную функцию. как раз она и вызывается в третьем вопросе.
2. @ -- онозначение спискового контекста, т.е. получение списка из $actions($event_type}, присвоение каждого элемента списка $issue. btw, не Sissue, с $issue.
PM MAIL ICQ   Вверх
7183847
Дата 20.8.2019, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(arto @ 19.8.2019,  06:54)
1. в данном случае ссылка на безымянную функцию. как раз она и вызывается в третьем вопросе.
2. @ -- онозначение спискового контекста, т.е. получение списка из $actions($event_type}, присвоение каждого элемента списка $issue. btw, не Sissue, с $issue.

Добрый день, про описание безымянной функции впринципе понятно, получается что она как бы выступает значением хеша actions ?

По второму пункту все равно не ясно )

Где именно там происходит вызов этой безымянной функции?

И что находится в @? Параметры функции process_event? Зачем тогда при ее описании указано в скобках ($)?
PM MAIL   Вверх
arto
Дата 20.8.2019, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1. да. значение элемента хеша -- ссылка на функцию.
2. &($issue>(action}}($event); -- вызывается незымянная функция с аргументом $event.
можно записать проще -- $issue->{'actioin'}->($event). perldoc perlref
3. в $actions($event_type} находится ссылка на список. выражение @{ $actions($event_type} }
разименовывает ссылку и возвращает сам список:
Код

  DB<1> $a = [ qw( aa bb cc dd ) ]

  DB<2> print $a
ARRAY(0x2448830)
  DB<3> print join ", ", @{ $a }
aa, bb, cc, dd
  DB<4> 

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


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

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


 




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


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

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