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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возврат изменённого значения из sub 
V
    Опции темы
vax1700
Дата 19.3.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 19.3.2006

Репутация: нет
Всего: нет



Есть sub:
Код

sub get_word_id {
        my ($word, $count, %words_array) = @_;
...

$count++;
....
return ...;



Вызываю так:
Код

my $id = &get_word_id($word,$words_count,\%words_array);


В процессе исполнения get_word_id выполняется запрос в БД, возвращается id, и инкрементируется $count.
Нужно вернуть изменённые $count и %words_array в тело родительской функции. Как это сделать?
Как бы я не пытался, у меня всё время $words_count = 0, хотя в подпрограмме оно изменяется.

В php так всё просто, а в перле решение, как оказалось, на поверхности совсем не лежит smile
Добавлено @ 13:15
В FAQ смотрел, там такого нет. Кстати неплохой вопрос для FAQ ИМХО.

Это сообщение отредактировал(а) vax1700 - 19.3.2006, 13:17
PM MAIL   Вверх
BlackLFL
Дата 19.3.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 8
Всего: 12



Код

#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser); # For debuging

print "Content-type: text/html\n\n";

my $word;
my @words_array = ( "xx", "zz", "yy");
my $id = 1;

sub get_word_id {
    my ($word, $count, $array) = @_;
    
    # Изменяем значение у массива @words_array с zz на aa
    @$array[1] = "aa";
    
    # Увеличиваем инкремент
    $count++;
    
    return $count;
}


$id = get_word_id( $word, $id, \@words_array );

print "<br>". join " ", @words_array;
print "<br>". $id;
1;

получаем
Цитата

xx aa yy
2


Это сообщение отредактировал(а) BlackLFL - 19.3.2006, 13:55
PM WWW   Вверх
vax1700
Дата 19.3.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 19.3.2006

Репутация: нет
Всего: нет



2BlackLFL

Так-то понятно, что отработает.
Ты инкрементируешь значение $count и возвращаешь его через return.
А мне надо через return совсем другое значение вернуть.
А $count и массив вернуть тоже изменёнными, т.е. способ с return не катит.
Добавлено @ 14:11
Т.е. грубо говоря, мне нужно вернуть 3 значения, которые могут быть изменены в sub.

В php так всё просто:
Код

$id = $this->sub($query, &$words_array, &$words_count);
и всё.

Это сообщение отредактировал(а) vax1700 - 19.3.2006, 14:12
PM MAIL   Вверх
BlackLFL
Дата 19.3.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 8
Всего: 12



Цитата(vax1700 @ 19.3.2006, 15:09 Найти цитируемый пост)
А мне надо через return совсем другое значение вернуть.

какое? Вы нигде не упоминаете какое!

Код

#!/usr/bin/perl
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser); # For debuging

print "Content-type: text/html\n\n";

my @words_array = ( "xx", "zz", "yy");
my $id = 1;

sub get_word_id {
    my ($count, $array) = @_;
    
    # Изменяем значение у массива @words_array с zz на aa
    @$array[1] = "aa";
    
    # Увеличиваем инкремент
    $$count++;
    
    my $var = "Hello";
    
    return $var;
}


my $value = get_word_id( \$id, \@words_array );

print "<br>". join " ", @words_array;
print "<br>". $id;
print "<br>". $value;
1;

Я вам дал ответ на поставленый вопрос... либо перефразируйте вопрос.

Это сообщение отредактировал(а) BlackLFL - 19.3.2006, 14:29
PM WWW   Вверх
vax1700
Дата 19.3.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 19.3.2006

Репутация: нет
Всего: нет



Всё, теперь ясно.
мне не хватало:

Цитата(BlackLFL @ 19.3.2006, 14:27 Найти цитируемый пост)
$$count++;

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


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

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


 




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


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

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