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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли сделать короче ? 
V
    Опции темы
meridian
Дата 12.2.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем!
Можно ли укоротить выражение

Код

$user = "name";    
my @field_ent = qw( role1 role2 ... role );
    foreach my $field ( @field_ent )
    {
        my @$list_users = GetListFieldTable();
        foreach my $var ( @$list_users )
        {
            $var =~s/\s+$//;
            if( $user eq $var )
            {
                push( @roles, $field );
            } 
        }
    }
return @roles;


Пасиба
PM   Вверх
amg
Дата 12.2.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Особо и не сократишь, если не менять алгоритм.
И вообще, my @$list_users - ошибка.
Что возвращает GetListFieldTable() ? Массив? Если да, то 
Код

foreach my $field ( @field_ent ) {
  #map {s/\s+$//; push(@roles,$field) if $user eq $_} GetListFieldTable();
  foreach ( GetListFieldTable() ) {
    s/\s+$//;
    push(@roles, $field) if $user eq $_;
  }
}
Внутренний цикл можно заменить закоментированным map-ом, но это уже, наверное, лишнее.
PM MAIL   Вверх
meridian
Дата 12.2.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо,
GetListFieldTable() возвращает массив
PM   Вверх
amg
Дата 12.2.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



meridian, может, я чего то не понял, но предложенный тобой код выглядит немного странно. Фактически, он делает следующее: если в списке, выдаваемом GetListFieldTable(), есть $user, то массиву @roles присваиваем массив @field_ent. Если это и нужно, то можно сделать гораздо проще.
PM MAIL   Вверх
tishaishii
Дата 12.2.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



Код
foreach my$field (<>) {
    foreach(GetListFieldTable) {
        s/\s+$//, $user eq $_ and push @roles, $field and last
    }
}

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


Шустрый
*


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

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



Немного не так
если в списке, выдаваемом GetListFieldTable(), есть $user, то массиву @roles присваиваем значение $field массива @field_ent.
PM   Вверх
meridian
Дата 12.2.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, Первое предложенное работает, второе нет
PM   Вверх
Nab
Дата 12.2.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вообщето учитывая что он $_ нигде не использует, а токмо сравнивает, то лучше...
Код

foreach my $field ( @field_ent ) {
    foreach(GetListFieldTable) {
        /$user\s*$/ and push(@roles, $field) and last
    }
}}


кстати по поводу last еще не известно, может в списке несколько одинаковых имен есть... в условии то задачи его нет...


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
meridian
Дата 12.2.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо
последнее Nab`тоже работает 
PM   Вверх
tishaishii
Дата 12.2.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



В каком смысле?
Ты в курсе что такое <>?
PM MAIL ICQ Skype   Вверх
Nab
Дата 13.2.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(tishaishii @  12.2.2007,  23:37 Найти цитируемый пост)
В каком смысле?Ты в курсе что такое <>?

боюсь нет smile он copy-paste smile


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
tishaishii
Дата 13.2.2007, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



<> eq <STDIN>.
Т.к. скрипт работает ещё как. Быстрее, чем предлагали.
PM MAIL ICQ Skype   Вверх
meridian
Дата 13.2.2007, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, есесно 1-й вариант рабочий тоже, я сам ошибся у себя в коде  smile 
PM   Вверх
tishaishii
Дата 15.2.2007, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



Цитата
foreach my $field ( @field_ent ) {
    foreach(GetListFieldTable) {
        /$user\s*$/ and push(@roles, $field) and last
    }
}}


Вместо /$user\s*$/ надо /\Q$user\E\s*/ хотябы, а то у меня имя пользователя будет (?{перл-код}).

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


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

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


 




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


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

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