Forum Webscript.Ru
Программирование => Perl => Тема начата: synthez от 12 Мая 2005, 21:33:26
-
Что за ошибка?
Can\'t use an undefined value as a HASH reference at file.pl line 392.
-
perldoc perldiag | less -p "Can\'t use an undefined value as"
-
эта ошибка указывает вот на эту строку
my $mime = $query->uploadInfo($filename)->{\'Content-Type\'};
-
А значение $filename у тебя чему равно ?
Покажи строки до вызова этих методов.
-
sub inputForm
{
my $table = shift;
my $query = new CGI;
my @tn = &names($table);
my %out;
my %params = $query->Vars;
my $flag = 0;
if($query->param(\'filename\'))
{
my $filename = $query->param(\'filename\');
my $fn = &getFileName($filename);
my $buffer;
my $mime = $query->uploadInfo($filename)->{\'Content-Type\'};
if(-e "$conf::image_dir/$fn")
{
print "File already ($fn) uploaded...
";
$flag = 0;
} else {
my $filename = $query->param(\'filename\');
my $fn = &getFileName($filename);
foreach my $tmp (@tn)
{
$out{$tmp} = $params{$tmp} if $params{$tmp};
}
if(&insert($table,\\%out))
{
open STORE, ">", $conf::image_dir . "/" . $fn or die "Can\'t upload $conf::image_dir: $!\\n";
if($mime !~ /text/)
{
binmode($filename);
binmode(STORE);
}
while( read($filename, $buffer, 1024) )
{
print STORE $buffer;
}
close STORE;
print "file uploaded...
";
$flag = 1;
}
else
{
$flag = 0;
}
}
} else {
$flag = 0;
}
return $flag;
}
-
Короче ошибок в коде не вижу, я думаю что проблема в том что параметр $filename неопределён.Ругается то на него.
Посмотри у тебя в имени поля "file" нет ошибки ?
-
Отладчик в руки - и 80 % вопросов снимается.
-
Извини а что за отладчик такой чудесный, ты в чём пишешь?
Можно просто "print"-ами посмотреть где скрипт отваливается.
-
613: Вот... никакой он не чудесный - а идущий вместе со всеми дистрибутивами perl.
вызывается так:
# perl -d script.pl
после чего можно пошагово пройти весь код и выяснить инициализацию всех параметров. А в данном случае будет полезна команда:
DB> x %params
которая выведет все ключи и значения этого хэша. рекомендую после вызова Vars сделать это. Для отладки скриптов с параметрами запускай отладчик так.
perl -d script.pl var=1 var=2 ... var=3
Вообще отладчик - очень классная вещь. Я правда консольным пользуюсь только под FreeBSD, под виндой использую отладчик из PDK.
P.S
Начал смотреть твой код и вот что подумал, зачем ты после инициализации хэша %params=$query->Vars; еще раз делаешь так:
$filename=$query->param{\'filename\'};
Да и вообще - я функцию Vars использую так (если использую)
use CGI qw(Vars)
my %params=Vars();
после чего работаю спокойно с %params как с обычным хэшом безовсяких $query. А у тебя получается что ты делаешь двойную работу (сперва дампишь все в хэш а потом снова вызываешь param - тогда зачем дампить???)
-
cr4ck3r спасиб.
просто не увидел