Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк с методом объекта 
:(
    Опции темы
Гость_Станислав
Дата 21.2.2005, 16:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











smile
У меня есть функция, которая хавает текстовый файл и возвращает ссылку на хэш с данными этого файла. Каждой записи в файле соответствует строка. Аргументом функции является номер строки. Так вот, эта функция отлично работает, когда ее просто вызываешь из главной программы типа $ref = &read_base("1"). Однако, кода вызывешь ее как метод класса типа
my $query = maw::site::obj::vote -> new();
my $input_ref = $query->read_base("1");
она возвращает только строку с id = 1
А если написать my $input_ref = $query->read_base("2"),
то она вообще ничего не возвращает!

Вот код модуля с методом:
################################################################################
#
# Класс "Голосование"
#
################################################################################
package maw::site::obj::vote;

BEGIN { push(@INC, "../../../"); }

use strict;

use Exporter;
use vars qw(@ISA @EXPORT);
@ISA = ('Exporter');
@EXPORT = qw(read_base);

use maw::error;
use maw::site;

#== Конструктор ===============================================================#
sub new
{
my $self = {};
$self->{RES_FILE} = 'data/res.dbf';
$self->{ANSW_FILE} = 'data/answ.dbf';
bless ($self);
return $self;
}

#== Чтение входных данных =====================================================#
# in:
# out: ссылка на хэш с данными, где $output->{num_of_answ} - количество ответов
# $output->{question} - вопрос
# @{$output->{results}} - массив с количествами голосов
# @{$output->{answers}} - массив с ответами

sub read_base {
my ($self, $qu_id) = @_; #что передается функции;
#return unless $qu_id; # облом, если id вопроса не правильный;
$qu_id--;

my ($i, $line);
my (@records);

#открываем и читаем файл с вопросами
open (RES, "< $self->{RES_FILE}") or die "Can't open file $self->{RES_FILE}: $!";
while (defined($line = <RES>)){
chomp;
push (@records, $line); #записываем в массив каждую строку файла;
}
close RES;

my @fields = split(/<-!->/, @records[$qu_id]); #перписываем в массив все элементы строки;
my $question = @fields[1]; #сохраняем вопрос;
my $num_of_answ = @fields - 2; #сохраняем количество ответов не вопрос;

@fields = splice(@fields, 2); #оставляем в массиве только количества ответов, остальное обрезаем;

@records = (); #очищаем массив;

#открываем и читаем файл с ответами
open (ANSW, "< $self->{ANSW_FILE}") or die "Can't open file $self->{ANSW_FILE}: $!";
while (defined($line = <ANSW>)){
chomp;
push (@records, $line); #записываем в массив каждую строку файла;
}
close ANSW;

my @fields_1 = split(/<-!->/, @records[$qu_id]); #перписываем в массив все элементы строки;
@fields_1 = splice(@fields_1, 1); #оставляем в массиве ответы, остальное обрезаем;

my $output = {};

$output->{'num_of_answ'} = $num_of_answ;
$output->{'question'} = $question;
$output->{'results'} = \@fields;
$output->{'answers'} = \@fields_1;

return $output;
}
#==============================================================================#

Вот так вызываю метод:
sub vote {
my $in = shift;
my $h = {};

my $v = maw::site::obj::vote -> new();

my $ref = $v->read_base($in);

$h->{answers} = $ref->{answers};
$h->{results} = $ref->{results};
$h->{question} = $ref->{question};

return genPage(readTemplate('vote'), $h);
}


  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.