in reply to rexexp across a ldap ldif file, collecting cn: guid: memberUID:

Like I said in the CB: read the file in paragraph mode and extract the sections with /^PATTERN/m. Example code:
#! perl -w $/ = ""; # paragraph mode while(<DATA>) { if(/^dn:/) { # skip irrelevant paragraphs my($cn) = /^cn:\s*(.*)/m; my($gid) = /^gidNumber:\s*(\d+)/m; my(@member) = /^memberUid:\s*(.+)/mg; print "cn: $cn\ngid: $gid\nmembers: @member\n\n"; } } __DATA__ *** Your sample data follows ***
The printout I get is:
cn: groupname1 gid: 122 members: member1 member2 member3 member4 member6 member7 cn: groupname2 gid: 113 members: member1 member2 member3 member4 member6 member7

Replies are listed 'Best First'.
Re^2: rexexp across a ldap ldif file, collecting cn: guid: memberUID:
by khippy (Scribe) on Aug 21, 2004 at 21:00 UTC
    Thank you for your code and hint. Updated, see downwards

    I tried the code as is, and I get a lot of
    Use of uninitialized value in concatenation (.) or string at ./data li +ne 9, <DATA> chunk <number of data line>.
    and a lot of empty hits
    cn: gid: members:
    mixed up data
    cn: username gid: 102 members:
    but also hits, which are right.
    This might be lead from dn: being inside irrelevant data blocks.

    How to face a block, and only check it out, if it starts with "dn: cn" at the very first line? This would disregard irrelevant data blocks.

    Update:
    if(/^dn: cn/) { # skip irrelevant paragraphs
    does exactly what I need. Paragraph mode is the one!
    supercool
    --

    there are no silly questions

    killerhippy