#! /usr/bin/env perl use strict; use warnings; use Data::Dumper; my $cmd = "ip addr show"; my %interface; open my $pipe, '-|', $cmd or die "(E) could not execute: $cmd: $!\n"; while ( my $line = <$pipe> ) { if ( $line =~ m/(\d{1,2}\: (.+)\: \<(.+)\>.*mtu (\d+).*state (UP|DOWN|UNKNOWN).*\n.*|\n.*inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/\d{1,2})/ ) { $interface{$2}->{link} = $1; $interface{$2}->{abilities} = $3; $interface{$2}->{mtu} = $4; $interface{$2}->{state} = $5; } } close $pipe; warn Dumper \%interface;