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