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


Автор: korob2001 19.10.2003, 12:58
Всем здрасте!
Написал фото альбом. Еще раньше написал счётчик. Теперь пытаюсь подключить с помощью require cчётчик к фото альбому. Но скрипт возвращает постояно результат + единицу. Через SSI счётчик работает без проблем.

Скрипт счётчика примерно такой:

Код

#!/usr/bin/perl -w
# файл counter.pl
use strict;
use Fcntl qw/ :flock /;
.........
......... # Объявляем глобальные переменные
.........
sub addCount {
 my $uri = shift || $ENV{ DOCUMENT_URI }; #либо $ENV{ SCRIPT_NAME },
                                                                      #либо через SSI
 #Подсчитывает в DBM файле где $uri - ключ хеша.
 #подпрограмма инкрементирует четчик
 #и возвращает результат такого вида:
 # <nobr><img src='../../count/0.gif'>.....<img src='../../count/1.gif'></nobr>
}
&addCount();

пытаюсь вызвать его так:
Код

#!/usr/bin/perl -w
#файл photos.pl
use strict;
use lib("../counter/");
require('counter.pl');
print addCount( $ENV{ SCRIPT_NAME } );

Получаю показания графического счётчика + 1 в конце. Насколько я знаю это require возвращает значение true, что говорит о том что библиотека успешно подключена. Но как избавиться от этой единицы? Вырезать её с помощью оператора s///; , думаю не самое умное решение. Может у кого будут другие предложения?

Вот ещё какая бодяга. Счетчик возвращает не полное значение, т.е. показания должны быть из 8 цифр, а он показывает из 7. Такое чувство что вместо этой, не достающей цифры выводится ета вот единица.

Заранее благодарен,
Денис

Автор: NightGoblin 20.10.2003, 21:20
korob2001
require, имхо, тут ни при чем. В подклчаемом файле в конце должно просто стоять 1; (или любое другое ненулевое значение). Более того, поскольку перл - компилятор, функция включается в код еще на этапе компиляции. Скорее всего, у тебя что-то не в порядке с функцией... Не мог бы ты привести код?

Автор: korob2001 21.10.2003, 16:02
Спасибо. Уже разобрался.
Проблема была вот в чём:

фукция возвращала такое значение.

print "$count";
# Где $count = "<img src='0.gif'><img src='0.gif'>...<img src='1.gif'>";

а вызывал я её так:

print &addCount( $ENV{ SCRIPT_NAME } );

вобщем работать всё начало после того как я удалил print при вызове:

&addCount( $ENV{ SCRIPT_NAME } );

Автор: NightGoblin 21.10.2003, 18:27
Ну правильно, функция у тебя сама распечатывает результат, а потом print печатает результат функции - 1,то есть true smile.gif

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