yes it works nice for me: the following version is also agnostic about the perl version:
use strict;
use warnings;
use feature qw (say signatures);
no warnings qw(experimental::signatures);
use IO::Prompter [
-style => 'bold blue',
-echostyle => 'bold magenta',
];
use Term::ANSIColor 5.0;
my @nums_under_255 = qw{0 26 51 77 102 127 153 179 204 230 243};
say '';
for my $r (@nums_under_255, 255) {
for my $g (@nums_under_255, 255) {
print ' ';
for my $b (@nums_under_255) {
print colored(text("r${r}g${g}b${b}"), join(' on_', fg($r,
+ $g, $b), "r${r}g${g}b${b}"));
}
say colored(text("r${r}g${g}b255"), join(' on_', fg($r, $g, 25
+5), "r${r}g${g}b255"));
}
}
say '';
my $rgb;
while (1) {
$rgb = prompt 'Convert hex to decimal rgb (or just hit "Enter" to
+quit): ', -return => '';
# Fix for MSWin -- see https://rt.cpan.org/Public/Bug/Display.html
+?id=118255
$rgb =~ s/\R\z//;
unless (length $rgb) {
say '';
last;
}
if ($rgb =~ /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/)
+{
my $ansi_rgb = sprintf 'r%dg%db%d', map hex, $1, $2, $3;
print colored(' --> [', 'bold white');
print colored(' ' x 8, "$ansi_rgb on_$ansi_rgb");
print colored('] --> ', 'bold white');
say colored($ansi_rgb, 'bold cyan');
}
else {
say colored("\nERROR: '", 'r255g0b0 on_r51g51b51'),
colored($rgb, 'r255g255b0 on_r51g51b51'),
colored(
"' is invalid. Six hexadecimal characters are expected
+; such as in the table above.",
'r255g0b0 on_r51g51b51'
);
}
}
sub fg ($r, $g, $b) {
#return $r + 2 * $g + $b > 204 ? 'black' : 'white';
return "r${r}g${g}b${b}";
}
sub text ($str) {
return sprintf ' %02x%02x%02x ', $str =~ /^r(\d+)g(\d+)b(\d+)$/;
}