# 1 2 3 4 5 6 # 0123456789012345678901234567890123456789012345678901234567890123456789 my @result = @arr[grep{defined}map{$i++;$_?$i-1:undef}split"",sprintf("%08b",0x2b)];