我想將文件句柄存儲到一個全局散列中,並且在沒有顯示CGI對象的情況下讀取()它在子例程中,但是我發現它不起作用(導致零大小的輸出文件)。CGI.pm:子程序之間丟失全局散列中的文件句柄?
這裏是簡化的Perl代碼:
#!/usr/local/bin/perl
use CGI;
use vars qw(%in);
&init_hash;
$fname = &process_uploaded_file if($in{'upfile'});
$fsize = -s $fname;
print "Content-Type: text/plain\r\n\r\n";
print "in{'upfile'}=",$in{'upfile'},"\r\n";
print "in{'desc'}=",$in{'desc'},"\r\n";
print "fname=",$fname,"\r\n";
print "fsize=",$fsize,"\r\n";
sub init_hash{
my $q = new CGI;
$in{'desc'} = $q->param('desc');
$in{'upfile'} = $q->param('upfile');
$in{'upfh'} = $q->upload('upfile') if($in{'upfile'});
}
sub process_uploaded_file{
my $fname = time.'.bin';
open(OUT,'>',$fname) || die('open file failed');
while(my $read = read($in{'upfh'}, my $buff, 4096)){
print OUT $buff;
}
close(OUT);
eval { close($in{'upfh'}); };
return $fname;
}
編輯:我應該提供Perl和cgi.pm版本。 Perl版本:這是爲MSWin32-x86-多線程 (有8個註冊的補丁,請參閱perl -V以獲取更多詳細信息)構建的perl 5,版本12,subversion 2(v5.12.2) $ CGI :: VERSION = '3.50';
我想你需要檢查信息是否從文件$中讀取{'upfh'} –
@KostiaShiian,但該文件是創建和寫入的。如果我將process_uploaded_file的內容追加到init_hash,並註釋掉第7行,它就可以工作。 – Roy