use strict; use warnings; use Scalar::Util 'looks_like_number'; my $C; my $M; my $Y; my $percentage_code; print "CMYK to FGDC Color Matcher\n\n"; print "CMY(K) values must be between 0 AND 100.\n"; print "The K value will always be 0 and thus it will not be asked for.\n"; $C = get_C(); $M = get_M(); $Y = get_Y(); print "You have entered the CYM(K) value of ($C, $M, $Y, 0)\n"; my @cmyk = ($C, $M, $Y); foreach my $val (@cmyk) { $percentage_code .= cmyk_to_fgdc($val); } my %color_dict = do './color_code_dict.pl' or die "Error: Could not load color_dict.pl: $! $@"; print "\n$percentage_code\n"; my $fgdc_code = $color_dict{$percentage_code}; print "You entered: $C, $M, $Y, which is percentage code: $percentage_code\n"; print "The FGDC Code is: $fgdc_code"; sub cmyk_to_fgdc { # 0% = 0; 8% = A; 13% = 1; 20% = 2; 30% = 3; 40% = 4; 50% = 5; 60% = 7; 70% = 7; >70 = 100 = X my ($num) = @_; if ($num < 6) {return "0";} elsif ($num <= 10) {return "A";} elsif ($num <= 16) {return "1";} elsif ($num <= 24) {return "2";} elsif ($num <= 34) {return "3";} elsif ($num <= 44) {return "4";} elsif ($num <= 54) {return "5";} elsif ($num <= 64) {return "6";} elsif ($num <= 74) {return "7";} else {return "X";} } sub get_C { while (1) { print "Enter a NUMBER BETWEEN 1 AND 100\n"; print "C: "; my $c = ; chomp($c); if (!looks_like_number($c)) { print "$c is NOT a number\n"; next; } if ($c < 0 || $c > 100) { print "Number must be BETWEEN 0 and 100!"; next; } return $c; } } sub get_M { while (1) { print "Enter a NUMBER BETWEEN 1 AND 100\n"; print "M: "; my $m = ; chomp($m); if (!looks_like_number($m)) { print "$m is NOT a number\n"; next; } if ($m < 0 || $m > 100) { print "Number must be BETWEEN 0 and 100!"; next; } return $m; } } sub get_Y { while (1) { print "Enter a NUMBER BETWEEN 1 AND 100\n"; print "Y: "; my $y = ; chomp($y); if (!looks_like_number($y)) { print "$y is NOT a number\n"; next; } if ($y < 0 || $y > 100) { print "Number must be BETWEEN 0 and 100!"; next; } return $y; } } my @nums = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);