Forum Webscript.Ru

Программирование => Perl => Тема начата: synthez от 12 Мая 2005, 21:33:26

Название: ошибка
Отправлено: synthez от 12 Мая 2005, 21:33:26
Что за ошибка?

Can\'t use an undefined value as a HASH reference at file.pl line 392.
Название: ошибка
Отправлено: arto от 12 Мая 2005, 21:57:43
perldoc perldiag | less -p "Can\'t use an undefined value as"
Название: ошибка
Отправлено: synthez от 12 Мая 2005, 22:05:05
эта ошибка указывает вот на эту строку

my $mime = $query->uploadInfo($filename)->{\'Content-Type\'};
Название: ошибка
Отправлено: 613 от 12 Мая 2005, 22:25:37
А значение $filename у тебя чему равно ?
Покажи строки до вызова этих методов.
Название: ошибка
Отправлено: synthez от 12 Мая 2005, 22:27:40
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;
}
Название: ошибка
Отправлено: 613 от 13 Мая 2005, 01:39:31
Короче ошибок в коде не вижу, я думаю что проблема в том что параметр $filename неопределён.Ругается то на него.
Посмотри у тебя в имени поля "file" нет ошибки ?
Название: ошибка
Отправлено: cr4ck3r от 13 Мая 2005, 15:17:25
Отладчик в руки - и 80 % вопросов снимается.
Название: ошибка
Отправлено: 613 от 13 Мая 2005, 18:07:56
Извини а что за отладчик такой чудесный, ты в чём пишешь?
Можно просто "print"-ами посмотреть где скрипт отваливается.
Название: ошибка
Отправлено: cr4ck3r от 13 Мая 2005, 18:57:56
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 - тогда зачем дампить???)
Название: ошибка
Отправлено: synthez от 13 Мая 2005, 20:34:48
cr4ck3r спасиб.
просто не увидел