#!/usr/bin/perl use strict; use warnings; $_ = do { local $/; }; my @AoH = map +{ interface => /^(\w+):\s+(flags)=(\S+)/, /(inet|ether|media|status):? (\S+)/g }, /.+?(?=^\w|\z)/gms; use Data::Dump 'pp'; pp \@AoH; __DATA__ lo0: flags=8049 mtu 16384 options=1203 inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=201 gif0: flags=8010 mtu 1280 en0: flags=8863 mtu 1500 ether f4:0f:24:29:df:4d inet6 fe80::1cb5:1689:1826:cc7b%en0 prefixlen 64 secured scopeid 0x4 inet 10.176.85.19 netmask 0xffffff00 broadcast 10.176.85.255 nd6 options=201 media: autoselect status: active en1: flags=963 mtu 1500 options=60 ether 06:00:58:62:a3:00 media: autoselect status: inactive p2p0: flags=8843 mtu 2304 ether 06:0f:24:29:df:4d media: autoselect status: inactive #### [ { flags => "8049", inet => "127.0.0.1", interface => "lo0", }, { flags => "8010", interface => "gif0" }, { ether => "f4:0f:24:29:df:4d", flags => "8863", inet => "10.176.85.19", interface => "en0", media => "autoselect", status => "active", }, { ether => "06:00:58:62:a3:00", flags => "963", interface => "en1", media => "autoselect", status => "inactive", }, { ether => "06:0f:24:29:df:4d", flags => "8843", interface => "p2p0", media => "autoselect", status => "inactive", }, ]