У нас есть собственный сайт, написанный на 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));
}
Без diff при сохранении файла переменная $ param_name представляется пустой.
Какой лучший способ справиться с этим? Как я уже говорил, моя главная цель - упростить обновления на сервере; есть ли какой-либо способ либо
a) (желательно) заставить% file_hash работать должным образом без модифицированной версии CGI.pm
б) предотвратить обновление CGI.pm (и это плохая идея)