Автор Тема: Подпрограмма  (Прочитано 10119 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Подпрограмма
« Ответ #15 : 06 Мая 2004, 17:03:27 »
попробуй так
eval "require \'файл.pl\'";
print $@;
должен вывести описание ошибки

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #16 : 06 Мая 2004, 17:08:21 »
Alone как мы уже выяснили, require у него проходит.
The documentations is your friend

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Подпрограмма
« Ответ #17 : 06 Мая 2004, 17:37:30 »
Я тут кое-что выяснил: файл не создаётся если это:

open (FH, ">./debug") or warn "Can\'t open file: $!@";
print FH \'Done!\';
close FH;


написать не после require..., а после вызова подпрограммы из этого модуля:

название подпрограммы($cat); # я её так вызываю (причём в цикле)

вот здесь вобщем перестаёт работать!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #18 : 06 Мая 2004, 17:42:31 »
покажи эту подпрограмму.
The documentations is your friend

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Подпрограмма
« Ответ #19 : 06 Мая 2004, 18:00:45 »
sub cat($cat)
{
          $categories = $dbh->prepare("SELECT * FROM categories WHERE type=\'news\'")|| die "Can\'t prepare statement: $DBI::errstr";
          $categories->execute;

$end=0;

while(@row = $categories->fetchrow_array)
{

if($row[3] == $cat)
{
$end=1;
}

}

           $categories->finish;

undef @row;

if($end != 1)
{

          $categories = $dbh->prepare("SELECT * FROM categories WHERE type=\'news\'")|| die "Can\'t prepare statement: $DBI::errstr";
          $categories->execute;

while(@row = $categories->fetchrow_array)
{

if($row[2] == $cat)
{
$p=$row[1];
$l=$row[2];
}

}

           $categories->finish;
           @names=(@names,$p);
           @cats=(@cats,$l);

}
else
{

$l=$cat;

for ($i=0; $i<10; $i++)
{
$n=0;
          $categories = $dbh->prepare("SELECT * FROM categories WHERE type=\'news\'")|| die "Can\'t prepare statement: $DBI::errstr";
          $categories->execute;
while(@row = $categories->fetchrow_array)
{

if($n==0)
{
$n=0;
}

if($row[3]==$l)
{
$p=$row[1];
$l=$row[2];
@cats=(@cats,$row[3]);
@names=(@names,$row[4]);
$n=1;
}

}
          $categories->finish;

}
@cats=(@cats,$l);
@names=(@names,$p);
}







        @names=reverse @names;
        @cats=reverse @cats;

return (@cats);
}
1;

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #20 : 06 Мая 2004, 18:43:04 »
что вот это значит? sub cat($cat)
прочитай о прототипах и перепиши начало саба так (насколько я понял):
sub cat($)
{
$cat = $_[0];
...
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #21 : 06 Мая 2004, 18:56:44 »
Кстати, тебя использование use strict в своих скриптах как никого другого касается. Исправь это и лишишся головной боли.
The documentations is your friend

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Подпрограмма
« Ответ #22 : 06 Мая 2004, 18:57:58 »
Да, вы правильно поняли. Тут я ошибся с оформлением..., переделал..., изменений нет. Она (осн. программа) как-будто перестаёт работать после вызова фунции.

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Подпрограмма
« Ответ #23 : 06 Мая 2004, 18:59:58 »
use strict в основной программе использую..., а в подпрограмме его тоже нужно писать?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #24 : 06 Мая 2004, 19:02:18 »
угу. у тебя же здесь куча необьявленных данных.
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #25 : 06 Мая 2004, 19:09:51 »
пошли дальше. меняем все
|| die
на
or die
следующее, покажи основной скрипт.
The documentations is your friend

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Подпрограмма
« Ответ #26 : 06 Мая 2004, 19:13:28 »
ВСЁЁЁЁ! УРА!!!! и Браво! :beer:  Вот ошибка:

Я то выборку из таблицы произвожу в подпрограмме, а подключение к БД не делаю (в самой же подпрограмме, а делаю только в основной)... хех... вот поэтому и не работало!

ОГРОМНОЕ Спасибо вам лично за помощь и потраченное на меня время!
_________
PS: а подключение к БД ведь можно в отдельную подпрограмму занести и вызывать в другой подпрограмме?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Подпрограмма
« Ответ #27 : 06 Мая 2004, 19:15:01 »
да, все зависит от желания
The documentations is your friend

Оффлайн DDHR

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://hopper.ru
Подпрограмма
« Ответ #28 : 06 Мая 2004, 19:15:53 »
Ну, тогда тема закрыта!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28