use Inline 'C'; my $string = ' ----------- ------'; my @res = parse($string); print "@res\n"; __END__ __C__ void parse ( char * str ) { int i = 0; char cur, last = '\0'; dXSARGS; sp = mark; while ( cur = *(str++) ) { if ( last == '-' && (isspace(cur) || ! *str) ) XPUSHs(sv_2mortal(newSViv(i))); last = cur; i++; } PUTBACK; }