#!/usr/bin/perl -w use Benchmark; use Inline C => DATA => LIBS => '-lservices'; use strict; timethese( 500, { 'inline' => sub{ &inline(); }, 'pure' => sub{ &pure(); }, } ); sub pure { my( $serv, $pp, $rst, $port, $proto, $array, @all ); open( SERVICES, " ) { next if /^#/; next if /^\s+$/; ( $serv, $pp, $rst ) = split( /\s+/, $_ ); ( $port, $proto ) = split( /\//, $pp ); #print $serv, " ", $port, " ", $proto, " ", "\n"; push( @all, [$serv,$port,$proto] ); } close( SERVICES ); @all; } sub inline { my( @srvs ) = my_services(); } __END__ __C__ #include void my_services( ) { struct serv *serv_list = serv_load(NULL); struct serv *serv = serv_list; SV *record[3]; AV *entry; Inline_Stack_Vars; Inline_Stack_Reset; for (; serv; serv = serv->next) { record[0] = newSVpv(serv->name, 0 ); record[1] = newSVpv(serv->port, 0 ); record[2] = newSVpv(serv->proto, 0 ); Inline_Stack_Push(newRV_noinc((SV*)av_make(3,record))); } serv_destroy(serv_list); Inline_Stack_Done; }