#!/usr/local/bin/perl use warnings; use strict; use Data::Dumper; use Inline 'C'; my @array = ('POST100','POST5','POST10','POST1'); my @sorted = sort { $a <=> $b } map { make_bimodal($_) } @array; print Dumper \@sorted; sub make_bimodal { my $val = shift; my $num = substr $val => 4; my $dual; set_both($dual, $val, $num+0); return $dual; } __DATA__ __C__ void set_both(SV* variable, SV* string, SV* numeric) { SvPV(string, PL_na); if(!SvPOKp(string) || (!SvNOKp(numeric) && !SvIOKp(numeric)) ) { croak("Usage: set_both variable,string,numeric"); } sv_setsv(variable,string); if(SvNOKp(numeric)) { sv_setnv(variable,SvNV(numeric)); } else { sv_setiv(variable,SvIV(numeric)); } SvPOK_on(variable); }