6 use Data::Dump qw/dump/;
21 foreach my $line ( split(/\n/, `ip $object`) ) {
25 if ( $line =~ s{^(\d+):\s+(\w+):\s+}{} ) {
27 $objects[$i] = { $object => $2 };
28 $add_header = $object;
29 } elsif ( $line =~ s{^\s+}{} ) {
33 $line =~ s{^(\S+)\s+}{};
37 $add_header = $object;
40 push @headers, $add_header if $add_header && ! $headers->{$add_header}++;
42 if ( $line =~ s{<(\S+)>\s+}{} ) {
43 $add_header = 'flags';
44 $objects[$i]->{$add_header} = $1;
45 push @headers, $add_header unless $headers->{$add_header}++;
48 my @p = split(/\s+/, $line);
50 my ($n,$v) = splice @p, 0, 2;
52 $objects[$i]->{''} = $n;
54 } elsif ( $n =~ m{^(.+)/(.+)$} ) {
56 $objects[$i]->{$n} = $2;
57 $objects[$i]->{mac} = $v;
59 $objects[$i]->{$n} = $v;
61 push @headers, $n unless $headers->{$n}++;
64 # warn dump( $objects[$i] );
67 return unless @objects;
69 $objects[0] = [ @headers ];
75 my @objects = ip::lines( @_ );
76 return '' unless @objects;
78 my @headers = @{ shift @objects };
80 my @table = ( -( $#headers + 1), @headers );
81 foreach my $o ( @objects ) {
82 foreach ( 0 .. $#headers ) {
84 push @table, $o->{$h};
88 return html::table( @table );