Haz lo siguiente:
* Ejecuta el CGI en un navegador, si es posible, en Firefox
* Una vez presentada la página, pulsa Control+I (o Herramientas->Información de la página)
* Saldrá la ventana con todas las características de la página
* Pulsa sobre el botón Medios. Se presentará un listado de todos los gráficos presentes en la página
* Allí debería aparecer el enlace a logo.gif.
Comprueba que Firefox te da la información, tamaño e incluso te presenta el logo.gif en la parte inferior. Si no lo hace, es que no ha podido cargar el gráfico, bien sea porque está roto o porque no lo ha encontrado en el servidor.
Revisa la URL que aparece en el listado de medios para ver si es correcta.
Si lo es, comprueba que logo.gif es legible por parte del usuario. Has dicho que está todo en el cgi-bin: comprueba que tiene activados los permisos de lectura. De todas maneras, has de saber que algunos servidores web intentan ejecutar todo aquello que cuelga de cgi-bin/ porque se supone que en esa carpeta solo debe haber programas. Si es eso, mueve el gráfico a otro directorio "más normal" para los gráficos.
Quien realmente te va a decir qué es lo que pasa es el fichero error.log de actividad del servidor web.
Otra cosa que puedes hacer: pulsa con el botón derecho sobre la X de la imagen, y pulsa la opción "Ver imagen". Así, el Firefox intentará mostrar solo esa imagen. Si no está en la caché, intentará bajarla de nuevo. Si hay problemas, Firefox te dará alguna pista.
No dejes de usar la Consola de errores de Firefox (Herramientas->Consola de errores). Si hay algún problema con la página, también saldrá ahí.
Se nota que Firefox da muchas más ayudas que otros navegadores
Con respecto al código que has mostrado, unos comentarios:
* Intercambia las posiciones de CGI y CGI::Carp
* No necesitas hacer el print() del Content-Type, pues eso ya lo hace la función header() de CGI. Mira mi
CGI mínimo* No necesitas, generalmente, usar '&' en las llamadas a las funciones
* En vez de local(), lo más seguro es que quisieras usar my() (que, realmente, crea variables locales)
* Escapar comillas dobles con código HTML... es un rollo... ¿verdad?
Prueba con qq(), que hace lo mismo:
Using perl Syntax Highlighting
sub printError1
{
my ($msg) = @_;
print qq(
<table width
="400" border
="1" align
="center" bgcolor
="#FF9966">
<tr>
<td><img src
="logo.gif" width
="100" height
="66"><b>Error
:</b
> $msg</td
>
</tr
>
</table
>);
return;
}Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4