![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Гость_Станислав |
|
|||
|
Unregistered |
У меня есть функция, которая хавает текстовый файл и возвращает ссылку на хэш с данными этого файла. Каждой записи в файле соответствует строка. Аргументом функции является номер строки. Так вот, эта функция отлично работает, когда ее просто вызываешь из главной программы типа $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. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |