use Inline C => <<'_C_'; void woot(char *foo) { Inline_Stack_Vars; Inline_Stack_Reset; Inline_Stack_Push(newSViv( (unsigned char)foo[0] >> 4 )); Inline_Stack_Push(newSViv( (unsigned char)foo[0] & 0x0f )); Inline_Stack_Push(newSViv( (unsigned char)foo[1] >> 4 )); Inline_Stack_Push(newSViv( (unsigned char)foo[1] & 0x0f )); Inline_Stack_Done; } _C_ print join(' ',woot($n)),$/; # Gives 15 0 0 15