A lease record may not contain a client-hostname, so your file parsing should accommodate that. DB suggestions have been provided. Perhaps the following parsing option, which would read the file in lease-record 'chunks' (via local $/ = 'lease';), will be a helpful start:
use strict;
use warnings;
local $/ = 'lease';
while (<DATA>) {
my ($ip) = /\s+(\S+)\s+/ or next;
my $client = /client-hostname\s+(".+")/ ? $1 : '';
print "$ip,$client\n";
}
__DATA__
lease 192.168.20.4 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:00;
uid 00:00:00:00:00:00;
client-hostname "examle-workstation1";
}
lease 192.168.20.5 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:00;
}
lease 192.168.20.6 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 00:00:00:00:00:01;
uid 00:00:00:00:00:01;
client-hostname "examle-workstation2";
}
lease 192.168.20.7 {
starts 6 2009/06/27 00:40:00;
ends 6 2009/06/27 12:40:00;
hardware ethernet 01:00:00:00:00:00;
}
Output:
192.168.20.4,"examle-workstation1"
192.168.20.5,
192.168.20.6,"examle-workstation2"
192.168.20.7,
|