#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11165274 use warnings; my $size = 18; # NOTE may depend on word size my $n = 10 ** $size; # NOTE size needed for zero padding in sprintf my @number = 0; my $binary = 1 . 0 x 8192; for ( split //, $binary ) { my $carry = $_; for ( @number ) { $_ += $_ + $carry; $carry = int $_ / $n; $_ %= $n; } $carry and push @number, $carry; } my $decimal = (join '', map sprintf('%0*d', $size, $_), reverse @number) =~ s/0+(?=.)//r; #use Data::Dump 'dd'; dd $binary; print "$decimal\n";