Sto impazzendo su un CGI, il primo che faccio quindi sicuramente l'errore è mio, solo che non riesco a capirne il motivo. Qualcuno sa darmi una mano?

codice:
#!c:/perl/bin/perl
use CGI ':all';
use strict; # Ormai oggi è quasi obbligatorio.

my $dir = "c:/progetti/N-ext_new_php/"; # directory che contiene i file da scaricare

my $q = new CGI;

sub send_file {
 my($FH)=@_;
 open(FH, "$FH") || exit;
 binmode STDOUT;
 binmode FH;
 print <FH>;
 close FH;
 exit;
}

if(!param) {
 print header(-type => 'text/plain');
 print "Questa pagina risponde a interrogazioni di un 
sistema privato.\nQualsiasi utilizzo diverso e' 
vietato.\nOgni transazione e' registrata!\n";
 exit;
}

my $filename = $q->param('Name'); # raccoglie il nome file

if ( $filename =~ /.*\.\./ ) {
die();
}

my $ext = substr($filename, -3);

if ($ext == "pdf") {
  print $filename;
  print header(-type => 'application/pdf',-attachment => ${filename});
}

send_file($filename);

exit;
Per ora mi focalizzo su un determinato tipo di file, il codice originale però contiene altri controlli sull'estensione.
Alcuni pezzi mi sono stati dati da un altro lavoro (vedi la send_file) e li ho copiati uguali.
Non capisco dove sta l'errore. Eseguendo il file da linea di comando con
codice:
getfile.cgi Name=pippo.pdf
e cercando di stampare sia $ext che $filename, viene stampato tutto corretto.
Nel file php che lo richiama, inserisco semplicemente il richiamo al cgi con
codice:
getgile.cgi?Name=dir/nome.est
L'acroread parte ma poi non si visualizza nulla.
Non riesco a capire dove sbaglio...
Seconda domanda, come si fa a stampare ad una pagina tipo quella sopra qualcosa nel browser? Con print non mi fa vedere niente.
Sono sotto Win XP con Apache 2.0.53, PHP 5.0.4 e ActivePerl.
Grazie dell'eventuale aiuto.

EDIT: eseguendolo da linea di comando e redirigendo l'output in un file pdf, mi genera un file pdf perfettamente visibile. Allora perchè non funziona con Firefox e IE?