What do need exactly? The block or a specific line? How about
use strict; use Data::Dumper: my($lease, %info); while(<DATA>) { next unless (($lease) = /^lease \s+ ((?:\d+.?)+) \s+ \{$/x) .. /^\}$/; push @{ $info{$lease} } => { $1 => [split ' ', $2] } if /^\s+ (\S+) \s+ (.*);/x; } print Dumper(\%info); __DATA__ lease 10.2.56.40 { starts 3 2003/08/20 10:37:28; ends 3 2003/08/20 22:37:28; hardware ethernet 00:20:af:52:12:0f; uid 01:20:af:52:12:0f; client-hostname "Telephone"; } lease 10.2.56.75 { starts 3 2003/08/20 09:57:11; ends 3 2003/08/20 21:57:11; hardware ethernet 00:ef:18:ae:52:83; uid 01:00:ef:18:ae:52:83; client-hostname "beast"; } lease 10.2.56.77 { starts 2 2003/08/19 21:13:05; ends 3 2003/08/20 21:13:05; hardware ethernet 00:02:95:9b:78:18; uid 01:02:0b:95:9b:78:18; }
Which creates a hash of arrays of hashes of arrays and outputs this

$VAR1 = { '10.2.56.75' => [ { 'starts' => [ '3', '2003/08/20', '09:57:11' ] }, { 'ends' => [ '3', '2003/08/20', '21:57:11' ] }, { 'hardware' => [ 'ethernet', '00:ef:18:ae:52:83' ] }, { 'uid' => [ '01:00:ef:18:ae:52:83' ] }, { 'client-hostname' => [ '"beast"' ] } ], '10.2.56.77' => [ { 'starts' => [ '2', '2003/08/19', '21:13:05' ] }, { 'ends' => [ '3', '2003/08/20', '21:13:05' ] }, { 'hardware' => [ 'ethernet', '00:02:95:9b:78:18' ] }, { 'uid' => [ '01:02:0b:95:9b:78:18' ] } ], '10.2.56.40' => [ { 'starts' => [ '3', '2003/08/20', '10:37:28' ] }, { 'ends' => [ '3', '2003/08/20', '22:37:28' ] }, { 'hardware' => [ 'ethernet', '00:20:af:52:12:0f' ] }, { 'uid' => [ '01:20:af:52:12:0f' ] }, { 'client-hostname' => [ '"Telephone"' ] } ] };

See. perlre and the ever helpful YAPE::Regex::Explain for more info on the regexes used above and perlreftut, perldsc and tye's References quick reference for more info on data structures and dereferencing them.
HTH

_________
broquaint

update: modified code to store the per lease values as an array


In reply to Re: newb regular expression question by broquaint
in thread newb regular expression question by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.