#!/usr/bin/perl -w use strict; sub sqroot { my $maxdiff = 1e-18; my ($value, $num) = (1, shift @_); my $i = ''; # Added $num *= -1 and $i = 'i' if ($num < 0); # Added my $oldvalue = 0; while (abs($oldvalue - $value) > $maxdiff) { $oldvalue = $value; $value = $num / $value; $value = ($value + $oldvalue) / 2; } # return $value; # (old) return $value . $i; } my $num; do { print "Please enter a number: "; # changed from "positive number" chomp ($num = ); # } until ($num =~ /^\d*[.\d]\d*$/); # (old regex) } until ($num =~ /^-?\d+\.?\d*$/); my $sqrt = sqroot $num; print "Square root of $num: $sqrt\n";