#!/usr/bin/perl use strict; use Data::Dumper; my $interface; my %IPs; foreach ( qx{ (LC_ALL=C /sbin/ifconfig -a 2>&1) } ) { $interface = $1 if /^(\S+?):?\s/; next unless defined $interface; $IPs{$interface}->{STATE}=uc($1) if /\b(up|down)\b/i; $IPs{$interface}->{IP}=$1 if /inet\D+(\d+\.\d+\.\d+\.\d+)/i; } print Dumper(\%IPs); __END__ $VAR1 = { 'qfe0' => { 'IP' => '10.0.0.32', 'STATE' => 'UP' }, 'qfe1' => { 'IP' => '10.0.0.33', 'STATE' => 'UP' }, 'hme0' => { 'IP' => '10.0.0.14', 'STATE' => 'DOWN' }, 'lo0' => { 'IP' => '127.0.0.1', 'STATE' => 'UP' } };