Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Perl вешается при включенном -w


Автор: rcdimon 13.5.2006, 19:51
Имеется такой заголовок

#!/usr/perl58/bin/perl
use strict;
use CGI qw(:standard);
use DBI;
use MIME::Base64;
use lib qw('/home/test2.ru/cgi-bin/');
use Myconfig;


При включенном -w прога начинает работать как-то нестабильно. Добавишь пару строк и она виснет.
Виснет например при

$a = $b;

Если $b пустое... И т.д. Не могу понять в чем дело... Может кто ни будь сталкивался с этим? 

Автор: sharq 14.5.2006, 01:25
rcdimon, ужас, вот это страсти  smile 
Проверь свой скрипт так:
Цитата

perl -wc script.pl

Что пишет?
Добейся того, чтобы ни одного ворнинга не осталось.

 smile  

Автор: rcdimon 14.5.2006, 06:38
Цитата

    my ($string, $type)    = @_;

    return undef unless $string;

    if ($type eq 'digit'){


Пишет что в if я использую необъявленную переменную.... Не понимаю куда уж объявистее

Добавлено @ 06:39 
а если с -wc  пишет Syntax OK и все.... 

Автор: sharq 14.5.2006, 11:51
rcdimon, 
Цитата(rcdimon @  14.5.2006,  07:38 Найти цитируемый пост)
Пишет что в if я использую необъявленную переменную....

ну правильно пишет.

Вот так надо:
Код

if (!$type) {
   ...
} elsif ($type eq 'digit') {
  ...
} else {
  ...
}


или так
Код

if ($type && $type eq 'digit') {
  ...
}


или так
Код

my $string = shift || return;
my $type = shift || 'undef'; # или какое-нить значение по умолчанию

# теперь $type всегда определен
if ($type eq 'digit') {
  ...
}


 smile  

Автор: rcdimon 15.5.2006, 16:29
Ну это уже даже нелогично 

Автор: korob2001 16.5.2006, 16:21
Цитата(rcdimon @  15.5.2006,  13:29 Найти цитируемый пост)
Ну это уже даже нелогично

Почему не логично? Присвой переменно значение поумолчанию, например пустую строку:
Код
my $var = shift || "";

Теперь даже если подпрограмма не получит значение переменной, переменная $var будет определена. Но так как от пустой строки толку мало, то можно сразу же поставить такой условный выход их подпрограммы:
Код
sub check {
    my $var = shift || "";
    return "Error" unless $var;
}

Или что-то в таком духе:
Код
sub check {
    my $var = shift || die "You must call subrutine 'check' whith one argument\n";
    print $var;
}

check();
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)