linux - 从 CGI.pm 中获取自定义代码

标签 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'});
           }

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

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 RT作为期望的改进?将 $param\%header(而不是 $header{'Content-Type'})传递给回调似乎是合理的。

要回答您的问题,您可以在本地目录中安装 CGI。首先搜索 PERL5LIB env var 中的目录,因此会找到您的 CGI 版本,而不是 Ubuntu 安装的版本。

关于linux - 从 CGI.pm 中获取自定义代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208305/

相关文章:

r - linux redhat gsl R安装错误: cannot run C compiled programs.

linux - Unix 环境中的多线程/并行 Bash 脚本

linux - 设置 JBOSS EAP 6 的多个实例

windows - 如何判断我的 Perl 脚本是否在 Windows 下运行?

nginx - 在 Ubuntu 10.04 上使用 Nginx 设置 Tornado 以供生产使用

java - 连接时 Zookeeper java.net.NoRouteToHostException

regex - Perl 正则表达式意外的性能命中

arrays - Perl 数组有值但无法访问它们

bash - 如何随机化列表并遍历随机化列表 (bash)

ubuntu-10.04 - 如何在 Ubuntu 中制作 initrd.img?