Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Помогите с перловкой, пожалуйста.  (Прочитано 654 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnrDaemon

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Помогите с перловкой, пожалуйста.
« : 09 Февраля 2014, 12:45:55 »
Пытаю тут amavis на предмет излечения от непроходимой тупости конфигов.
$myhostname удачно прочитал, а вот с local_domains_acl засада.

Строчка для получения нужной настройки от postfix -
Код: (perl) [Выделить]
chomp($mydestination = `postconf -h mydestination`);Но в $mydestination получается строка.
Эту строку надо бы разбить на кусочки по пробелам с запятыми.

В гугле накопал вариант

Код: (perl) [Выделить]
chomp(my $mydestination = `postconf -h mydestination`);
@local_domains_acl = $mydestination =~ /\w+(?:[\.\-]\w+)*/g;

Оно будет работать?
Может, есть короче решение? Без промежуточной переменной?
« Последнее редактирование: 09 Февраля 2014, 12:49:43 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Помогите с перловкой, пожалуйста.
« Ответ #1 : 10 Февраля 2014, 03:11:19 »
Как вариант:
Код: (perl) [Выделить]
@local_domains_acl = grep {!/^$/} split /\s{0,},\s+|\n/, `postconf -h mydestination`;
Есть лишнее, но это так, на всякий случай. :)
Также можно добавить ещё чего-нибудь, например сортировку.
« Последнее редактирование: 10 Февраля 2014, 03:19:06 от unimix »

Оффлайн AnrDaemon

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Помогите с перловкой, пожалуйста.
« Ответ #2 : 10 Февраля 2014, 03:38:48 »
Это как-то уже совсем перлово... >.<
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Помогите с перловкой, пожалуйста.
« Ответ #3 : 10 Февраля 2014, 04:13:28 »
На самом деле не всё так сложно. В примере используется конвеер справа налево.

1. cначала команда split(/PATTERN/, EXPR) делит строку в массив (в примере скобки опущены);
2. затем массив передаётся команде grep {/PATTERN/}, которая отфильтровывает строки в соответствии с шаблоном;
3. оставшиеся строки сохраняются в массиве @local_domains_acl.

Если перед grep написать sort, то массив, прошедший фильтр grep, ещё и отсортируется (@local_domains_acl = sort grep ...)

Оффлайн AnrDaemon

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28469
    • Просмотр профиля
Re: Помогите с перловкой, пожалуйста.
« Ответ #4 : 10 Февраля 2014, 04:21:40 »
Не знаю, на сколько верно, но однострочка сработала.
Код: (perl) [Выделить]
@local_domains_acl = `postconf -h mydestination` =~ /\w+(?:[\.\-]\w+)*/g;
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.046 секунд. Запросов: 26.