aca esta el codigo completo terminado:
Cita: #!/usr/bin/perl
print "Ingrese el nombre del archivo .html \n";
$file=<STDIN>;
$file2=$file;
open(archivo,$file) || die "no se puede abrir el archivo\n";
open(html,">salida.html.spam") || die "$!";
@string=<archivo>;
my $string_html = join(" ", @string);
#Le sacamos los saltos de línea para trabajar más cómodos
$string_html =~ s/\n//g;
#tomamos el código que hay entre <body> y </body> con su contenido y atributos
my ($atributos,$contenido) = $string_html =~m#<body(.*?)>(.*?)</body>#i;
#elimino los 3 primeros caracteres a atributos y dejo todo en minusculas
$atributos =~ s/ bg//g;
$atributos =~ tr/[A-Z]/[a-z]/;
# si encuentro un texto(para eso el espacio, para diferenciar fondo de texto) con el color del fondo, lo paso a un color neutro (negro)
$string_html =~ s/ $atributos/color=#000000/;
# grabo al archivo
print html $string_html;
#cierro archivos
close(archivo);
close(html);
se agradece al maestro monoswin