LINUX.ORG.RU

Perl, use Net::LDAP Помогите правильно обработать вывод

 ,


0

1

Привет. Взяв пример из документации https://metacpan.org/pod/Net::LDAP::Examples#PROCESSING-Displaying-SEARCH-Results приспособил для своих нужд для поиска интересующих записей и атрибутов. Для дальнейшей обработки найденного, я бы хотел использовать хэш, где ключ - какой-то выбранный атрибут, а значение - все остальные атрибуты через пробел. Вот так у меня получилось

#код из примера
my @entries = $result->entries;
my $entr;
foreach $entr ( @entries ) {
  my $attr; my $attrVal;
  my $str='';
  foreach $attr ( sort $entr->attributes ) {
    next if ( $attr =~ /;binary$/ );
    my $attrVal = $entr->get_value ( $attr );
#это мой велосипед
    my $tmp=(join($attr,$attrVal))."|";
    $str=$str.$tmp;
    while ($str=~/^(.*)|(.*)|(.*)|/g) {
      printf "%-20s %s\t%s\n", $3,$2,$1;
      $hash{$3} = join ' ',$2,$1;
    }
#велосипед
  }
}

но это некрасиво/неправильно/мне стыдно - значения отсортированных по алфавиту названий атрибутов склеиваю в строку, а потом её разбиваю. Как правильно, в лучших традициях perl обработать вывод найденного?



Последнее исправление: Perspective (всего исправлений: 3)

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

чтобы получить все возможные полученные атрибуты - юзаешь keys hash

anonymous2 ★★★★★
()
Ответ на: комментарий от anonymous2

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

Там не всё так просто с возвращаемыми данными, они разрознены. Мне не хватает знаний сформулировать правильно, но не зря (мне так кажется) я накапливаю строку и завожу её же в цикл сравнения.

Perspective
() автор топика
Последнее исправление: Perspective (всего исправлений: 1)
Ответ на: комментарий от Perspective

где ключ - какой-то выбранный атрибут, а значение - все остальные атрибуты через пробел

зачем тебе «все остальные атрибуты через пробел» как значение? в твоем примере они в хеше будут все одинаковыми (какой в этом смысл?), т.к. атрибуты в entry не меняются!

anonymous2 ★★★★★
()
Ответ на: комментарий от anonymous2

в твоем примере они в хеше будут все одинаковыми

мой пример рабочий, и printf выводит на 100% правильно, и хэш заполняется тоже правильно.

Perspective
() автор топика
Последнее исправление: Perspective (всего исправлений: 2)
Ответ на: комментарий от Perspective

да никто не спорит что он не рабочий, прст ни кто кроме тебя не знает что нужно))

зачем тебе «все остальные атрибуты через пробел» как значение?

anonymous2 ★★★★★
()

Советую юзать Data::Dumper для понимания структуры

pinachet ★★★★★
()
Ответ на: комментарий от sergej

и Data::Dumper плюсую, сильно помогает увидеть что за херня получилась :)

sergej ★★★★★
()
Ответ на: комментарий от sergej

или тебе просто нужен foreach по массиву значений аттрибута?

sergej ★★★★★
()

Люблю перл за то, что в регекспах почти всегда присутствуют сиськи.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.