从CGI.pm获取自定义代码

Joh*_*hnB 1 linux perl ubuntu-10.04

我们有一个用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'});
           }
Run Code Online (Sandbox Code Playgroud)

依赖于此差异的代码如下:

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));
}
Run Code Online (Sandbox Code Playgroud)

如果没有diff,则在存储文件时,$ param_name变量似乎为空.

处理这个问题的最佳方法是什么?正如我之前所说,我的主要目标是简化服务器的更新; 是否有某种方法可以

a)(最好)获取%file_hash以便在没有CGI.pm的修改版本的情况下正常工作b)防止更新CGI.pm(这是一个坏主意)

ike*_*ami 6

您是否尝试将此作为期望的改进提交给CGI RT?传递$param\%header(而不是$header{'Content-Type'})回调似乎是合理的.

要回答您的问题,您可以在本地目录中安装CGI.PERL5LIB首先搜索env var中的目录,这样就可以找到你的CGI版本,而不是Ubuntu安装的版本.