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


Автор: igorold 20.3.2006, 16:18
Запустил проверку скрипта :
perl -w support.pl
и вывелось куча строк, где посмотреть, что за ошибки?
последняя строка повторяется много раз ....
просто скрипт тормозить начал, я подумал - может из-за этого ...
Код

[Mon Mar 20 18:10:14 2006] support.pl: Unquoted string "dfd" may clash with future reserved word at support.pl line 57.
[Mon Mar 20 18:10:15 2006] support.pl: Using a hash as a reference is deprecated at support.pl line 7141.
[Mon Mar 20 18:10:15 2006] support.pl: Using a hash as a reference is deprecated at support.pl line 7145.
[Mon Mar 20 18:10:15 2006] support.pl: Using a hash as a reference is deprecated at support.pl line 7210.
[Mon Mar 20 18:10:15 2006] support.pl: Using a hash as a reference is deprecated at support.pl line 7214.
[Mon Mar 20 18:10:16 2006] support.pl: Use of uninitialized value in numeric gt (>) at support.pl line 7306.
[Mon Mar 20 18:10:16 2006] support.pl: Use of uninitialized value in index at support.pl line 7577.
[Mon Mar 20 18:10:16 2006] support.pl: Use of uninitialized value in index at support.pl line 7577.
[Mon Mar 20 18:10:16 2006] support.pl: Use of uninitialized value in index at support.pl line 7577.
............ предыдущая строка повторяется много раз   ..........................................................
[Mon Mar 20 18:10:16 2006] support.pl: Use of uninitialized value in index at support.pl line 7577.
[Mon Mar 20 18:10:16 2006] support.pl: Use of uninitialized value in index at support.pl line 7577.
[Mon Mar 20 18:10:17 2006] support.pl: Use of uninitialized value in string eq at support.pl line 77.

например 7577 строка такая:
Код

sub ReplaceChar
  #Аргументы: строка для замены, строка на которую менять, строка в которой менять
  #Результат: строка с замененным символом
{
    my $Test = index $_[2], $_[0];  # ------------  это строка 7577 ---------
    while ($Test ne -1)
    {
        substr($_[2], $Test, length($_[0])) = $_[1];
        $Test = index $_[2], $_[0];
    }
    return $_[2];
}


Автор: sharq 20.3.2006, 16:49
igorold,
Цитата(igorold @ 20.3.2006, 17:18 Найти цитируемый пост)
что за ошибки?

Это не ошибки, а warning!


Цитата(igorold @ 20.3.2006, 17:18 Найти цитируемый пост)
my $Test = index $_[2], $_[0];  # ------------  это строка 7577 ---------

Просто переменные $_[0] или $_[2] - не определены.
Можешь поставить проверку на неопределенность или инициализировать их в случае undef.

smile

Автор: nitr 20.3.2006, 17:23
проверка к примеру if defined(переменная)

Автор: igorold 21.3.2006, 07:04
Цитата(sharq @ 20.3.2006, 16:49)
Можешь поставить проверку на неопределенность или инициализировать их в случае undef.

smile

а можно это в виде примера продемонстрировать? .... smile

Автор: nitr 21.3.2006, 10:39
igorold, сказал же поставь условие if(defined($1)) {} к примеру!

Автор: sharq 21.3.2006, 12:12
igorold,
Цитата(igorold @ 21.3.2006, 08:04 Найти цитируемый пост)
а можно это в виде примера продемонстрировать?

smile

В начало функции поставь
Код

{
  return unless $_[2] && $_[1];
  ...
}


Кстати, ты на perl программируешь или на Cи??? Что за стиль?
perldoc perlstyle

И для твоей задачи будет удобней регулярные выражения! (в perl конечно smile )

smile

Автор: igorold 21.3.2006, 12:57
Цитата(sharq @ 21.3.2006, 12:12)
igorold,
Цитата(igorold @  21.3.2006,  08:04 Найти цитируемый пост)
а можно это в виде примера продемонстрировать?

smile

В начало функции поставь
Код

{
  return unless $_[2] && $_[1];
  ...
}


Кстати, ты на perl программируешь или на Cи??? Что за стиль?
perldoc perlstyle

И для твоей задачи будет удобней регулярные выражения! (в perl конечно smile )

smile


просто я правлю чужой скрипт ... парень, который его делал, уволился ...
а раньше я с perl и HTML не сталкивался ... так что изучаю читая теорию, ваш форум, и разбираясь в скрипте ...

кстати, я тоже уже думал, что там подойдет может быть рег.выражение ....

Автор: nitr 21.3.2006, 13:04
$str =~ s{$old_str}{$new_str}smg; и не надо функций ;)

Автор: igorold 21.3.2006, 13:05
Код

sub ReplaceChar
  #Аргументы: строка для замены, строка на которую менять, строка в которой менять
  #Результат: строка с замененным символом
{
    my $Test = index $_[2], $_[0];  # ------------  это строка 7577 ---------
    while ($Test ne -1)
    {
        substr($_[2], $Test, length($_[0])) = $_[1];
        $Test = index $_[2], $_[0];
    }
    return $_[2];
}

а если использовать рег выражение, то так можно написать? :
Код

sub ReplaceChar
  #Аргументы: строка для замены, строка на которую менять, строка в которой менять
  #Результат: строка с замененным символом
{
   return unless $_[2] && $_[1]; 
   $_[2] =~ s/$_[0]/$_[1]/g;
    return $_[2];
}

..... но тогда может проще без подпрограммы, сразу рег.выражение писать .... ?? smile
Добавлено @ 13:08
А выражение
$str =~ s{$old_str}{$new_str}smg;
и
$str =~ s/$old_str/$new_str/smg;

одинаковы?

Автор: nitr 21.3.2006, 13:11
одинаковы smile Вообще откажись от sub ReplaceChar, замени на рег.выр
быстрее работать будет!

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