1 2 3 4 5 6 7 8 12345678901234567890123456789012345678901234567890123456789012345678901234567890 sub{for(reverse split//,sprintf('%b',shift)){$_&&push@v,2**$n;$n++}@v}