#!/usr/bin/perl -w use strict; use Benchmark; my @array = ( 'Inter-|   Receive                                                |  Transmit'            , ' face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed'            , '    lo:    7897     101    0    0    0     0          0         0     7897     101    0    0    0     0       0          0'            , '  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0'            , '  eth0:  928792    1249    0    0    0     0          0         0   261023    1281    0    0    0     0       0          0'            , '  dsl0:  899950    1215    0    0    0     0          0         0   226997    1169    0    0    0     0       0          0'            ); my (%net,%sum); Benchmark::cmpthese(-1, {   '%net' => sub { for (@array) {                      if (/^(\s+|)(\w+):(\s+|)(.*)/) {                         ( $net{$2}{NetRxBytes}                         , $net{$2}{NetRxPackets}                         , $net{$2}{NetRxErrs}                         , $net{$2}{NetRxDrop}                         , $net{$2}{NetRxFifo}                         , $net{$2}{NetRxFrame}                         , $net{$2}{NetRxCompr}                         , $net{$2}{NetRxMulti}                         , $net{$2}{NetTxBytes}                         , $net{$2}{NetTxPacktes}                         , $net{$2}{NetTxErrs}                         , $net{$2}{NetTxDrop}                         , $net{$2}{NetTxFifo}                         , $net{$2}{NetTxColls}                         , $net{$2}{NetTxCarr}                         , $net{$2}{NetTxCompr}                         ) = split /\s+/, $4;                         $sum{NetRxBytes} += $net{$2}{NetRxBytes};                         $sum{NetTxBytes} += $net{$2}{NetTxBytes};                      }                   }             },   '@net' => sub { for (@array) {                      if (/^(\s+|)(\w+):(\s+|)(.*)/) {                         @{$net{$2}}{qw(                            NetRxBytes NetRxPackets NetRxErrs NetRxDrop NetRxFifo NetRxFrame                            NetRxCompr NetRxMulti NetTxBytes NetTxPacktes NetTxErrs NetTxDrop                            NetTxFifo NetTxColls NetTxCarr NetTxCompr                         )} = split /\s+/, $4;                         $sum{NetRxBytes} += $net{$2}{NetRxBytes};                         $sum{NetTxBytes} += $net{$2}{NetTxBytes};                      }                   }             }, });       Rate %net @net %net 3199/s   -- -22% @net 4110/s  28%   --       Rate %net @net %net 3349/s   -- -17% @net 4036/s  21%   --       Rate %net @net %net 3412/s   -- -18% @net 4148/s  22%   --