Unfortunately, it looks like you don't have a true color terminal. See "Term::ANSIColor - Supported Colors" for more about that.
I got similar errors to what you're seeing when making a typo while developing and testing. This sort of thing:
$ perl -E 'use Term::ANSIColor; say colored("black on white", "r0g0v0 +on_white")' Invalid attribute name r0g0v0 at -e line 1.
However, there's no typo that I can see in what you've posted. You could do a couple of tests outside of my script.
$ perl -E 'use Term::ANSIColor; use Data::Dump; my $x = colored("black + on white", "r0g0b0 on_white"); say $x; dd $x' black on white "\e[38;2;0;0;0;47mblack on white\e[0m" $ perl -E 'say "\e[38;2;0;0;0;47mblack on white\e[0m"' black on white
Both of those give me the text "black on white" in black on a white background.
I don't have a Perl on an MSWin platform to test. I don't know about dumb and not dumb TERM values. For what it's worth:
$ echo $TERM xterm
Sorry I can't be of more help. Is there anything in AM's post that's useful for you?
Edit (stupid typo fix): s/white foreground/white background/.