in reply to loop problem
G'day WisDomSeeKer34,
Here's how I might tackle this:
#!/usr/bin/env perl use strict; use warnings; use feature 'say'; use constant PI => 4 * atan2 1, 1; say 'Type radius (>=0) or just hit Return to exit.'; while (1) { print 'Radius: '; chomp(my $radius = <>); last unless length $radius; if ($radius =~ /^[+-]?(?:\d+|\d*[.]\d+)$/) { if ($radius < 0) { say "Radius [$radius] is less than zero. Try again."; next; } say 'Circumference: ', 2 * PI * $radius; } else { say "Invalid radius [$radius]. Try again."; next; } }
Notes:
Example output:
$ ./pm_1216483_loop_qanda.pl Type radius (>=0) or just hit Return to exit. Radius: 123.456 Circumference: 775.696925283163 Radius: q Invalid radius [q]. Try again. Radius: 0 Circumference: 0 Radius: +0 Circumference: 0 Radius: -0 Circumference: 0 Radius: 0.00000001 Circumference: 6.28318530717959e-08 Radius: +0.00000001 Circumference: 6.28318530717959e-08 Radius: -0.00000001 Radius [-0.00000001] is less than zero. Try again. Radius: .00000001 Circumference: 6.28318530717959e-08 Radius: +.00000001 Circumference: 6.28318530717959e-08 Radius: -.00000001 Radius [-.00000001] is less than zero. Try again. Radius: 1 Circumference: 6.28318530717959 Radius: -1 Radius [-1] is less than zero. Try again. Radius: 1. Invalid radius [1.]. Try again. Radius: .1 Circumference: 0.628318530717959 Radius: load of rubbish Invalid radius [load of rubbish]. Try again. Radius: $
— Ken
|
|---|