El problema está en que no vemos el código HTML en que se basa ese ejemplo (figura 4.2). Solo dice que está basado en el formulario de la figura 4.1, que a su vez ha sido generado mediante otro código cgi.
Suponiendo que tú no estás usando ese código generado, y que en su lugar estás usando un formulario HTML aparte, que es el que nos muestras en el segundo listado, entonces el error está en el propio código HTML: no estás indicando el método de codificación en que los datos van a subir al servidor, dentro del formulario.
Tienes que cambiar la línea del <form> por esta otra:
Using html4strict Syntax Highlighting
- <form method="POST" action="imprime.pl" enctype="multipart/form-data">
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Hemos agregado el atributo 'enctype'. Sin él, no sube ningún dato (no hay 'upload'), por lo que uploadinfo() siempre devolvía nulo, y de ahí el error que veías.
En el cgi, hacemos un pequeño cambio para que el programa admita todo tipo de archivos, y así ver el tipo MIME del archivo que pretendemos subir:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use CGI qw(:standard);
- my $q=new CGI;
- my $filename = $q->param('uploaded_file');
- my $contenttype= $q->uploadInfo($filename)->{'Content-Type'};
- print header;
- print start_html;
- print "El tipo es de $contenttype\n";
- print end_html;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Lo he dejado funcionando en http://joaquinferrero.com/upload.html