#!/usr/bin/perl -w use strict; sub longdiv { # take the parameter passed into the sub and store in $in my $in = shift; ... # return the result return ($out, $carry); } sub longmul { my ($div, $mod) = @_; my $out = sprintf('%06d', substr($div, -3, 3, '') * 222 + $mod); while (length($div)) { substr($out, 0, 3, sprintf('%04d', substr($out, 0, 3) + substr($div, -1, 1, '') * 222 )); } $out =~ s/^0+//; return $out; } # call the function and print the output my ($out, $carry) = longdiv("15000000"); print("$out, $carry\n"); # WRONG. Should be 67567 and 126. print(longmul($out, $carry), "\n"); print(longmul('67567', 126), "\n");