У меня запущен mod_perl2 на виртуальном хосте, и я пытаюсь сделать постоянное соединение MySQL между запросами на обработку нагрузки на сервер. Я прочитал всю документацию и книгу по этой теме, и я до сих пор не знаю, почему эта «голая» реализация веб-приложения mod_perl2 отвечает «Это сломано!».
package Test;
use strict;
use warnings;
use Apache2::Const;
use Carp qw{croak};
use DBI;
our $mysql_handle;
sub handler {
print "Content-Type: text/plain\n\n";
print (defined $mysql_handle ? "It's defined!" : "It's broken!");
return Apache2::Const::OK;
}
sub child_init {
my ($db, $host, $port, $user, $pass)
= qw{app_db localhost 3306 app_user app_pass};
$mysql_handle
= DBI->connect("dbi:mysql:database=$db;host=$host;port=$port", $user, $pass)
or croak("Failed to establish a connection with mysqld: $DBI::errstr");
return Apache2::Const::OK;
}
1;
Это очень странно и не имеет никакого смысла для меня. Как будто $ mysql_handle имеет лексическую область видимости - когда это не так! Пожалуйста, кто-нибудь может мне это объяснить?