【发布时间】:2011-08-26 17:17:41
【问题描述】:
我们有一个用 Perl 编写的自定义站点,它使用了稍微修改过的 CGI.pm 版本。在服务器更新期间,CGI.pm 可能会在更新时被覆盖。我的目标是能够在不影响站点的情况下更新服务器 - 即更改依赖于修改后的 CGI.pm 的代码。不幸的是,我对 Perl 语法或最佳实践不是很熟悉。
这是修改后的 CGI.pmn 的差异(行号与最新版本的 CGI.pm 不同):
--- CGI.pm.orig Tue Nov 7 12:14:09 2006
+++ CGI.pm Tue Nov 7 12:13:29 2006
@@ -3386,7 +3386,7 @@ sub read_multipart {
if (defined $self->{'.upload_hook'})
{
$totalbytes += length($data);
- &{$self->{'.upload_hook'}}($filename ,$data, $totalbytes, $self->{'.upload_data'});
+ &{$self->{'.upload_hook'}}($filename ,$data, $totalbytes, $self->{'.upload_data'}, $param, $header{'Content-Type'});
}
print $filehandle $data if ($self->{'use_tempfile'});
}
依赖于这个差异的代码如下:
my %file_hash = ();
my $page = new CGI(\&file_reader, \%file_hash, 0);
my $session = &get_session($page);
foreach my $param_name (keys %file_hash) {
my $notes_param = $param_name . "_notes";
&store_file($file_hash{$param_name}, $page->param($notes_param),
&get_session_name($session));
}
没有差异,当文件被存储时,$param_name 变量看起来是空的。
处理此问题的最佳方法是什么?正如我之前所说,我的主要目标是简化对服务器的更新;有什么办法吗
a) (最好)让 %file_hash 在不修改 CGI.pm 版本的情况下正常工作 b) 阻止更新 CGI.pm(这是个坏主意)
【问题讨论】:
-
CGI.pm 是一团糟,你是对的,最好不要修改版本。关于您的差异 - 是否有其他部分引用
$param变量?它包含什么?更好的是,我会废弃修改后的 CGI 并查看问题。你想做什么,为什么需要$file_hash{param_name}变量?
标签: linux perl ubuntu-10.04