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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача данных в пакет, Подскажите начинающему 
:(
    Опции темы
cyberblade
Дата 17.2.2012, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите кто-нибудь новичку в перле, как праильно передать переменную или массив в созданный пакет. Возможно я просто не понимаю работу с переменными, глобальными и локальными...


Скажем есть пакет: LibTestPack.pm

Код

package LibTestPack;

use base 'Exporter';
our @EXPORT=qw(test_data);

sub test_data{
    my $local_data = "local";
    print "$local_data & $global_data\n";
}

1;


И есть основная программа из которой отбращаюсь к пакету, делаю это так: TestPack.pl

Код

#!/usr/bin/perl -w
#
    print "Content-Type: text/html; charset=utf-8\n\n";
    
# mod
    use DBI;
    use URI::Escape;
    use CGI qw(:standard);
    use CGI::Carp 'fatalsToBrowser';
    
# package
    use lib "library"; # - Путь к файлам
    use LibTestPack;  # - Подключаю пакет
    
# list
    $global_data = "global"; # Создаю переменную
    
    # Как передать $global_data в пакет подпрограмме test_data?
    
    test_data; # Использую подпрограмму из пакета.


После запуска на сервере программа выдаст local &
Хочу, чтоб выдала local & global
Кому-то вопрос покажется банальным.
Помогите мне разобраться... Спасибо.

Это сообщение отредактировал(а) cyberblade - 17.2.2012, 04:51
PM MAIL   Вверх
Pfailed
Дата 17.2.2012, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может передать аргументом?
sub test_data{
    my $local_data = "local";
    print "$local_data & $_[0]\n";
}

test_data($global_data);



--------------------
PM MAIL   Вверх
cyberblade
Дата 17.2.2012, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо добрый человек, еще встречный вопрос, а если переменная должна быть "видимой" через несколько пакетов? Допустим пакет LibTestPack использует еще один пакет, а тот в свою очаредь еще один. Для этого есть более элегантное решение? 

Это сообщение отредактировал(а) cyberblade - 17.2.2012, 05:39
PM MAIL   Вверх
Pfailed
Дата 17.2.2012, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если передавать аргументом, то кол-во пакетов роли не играет.
Ну а если действительно нужна какая-то очень глобальная переменная то создаёте отдельный пакет, в нем объявляете эту переменную как our, можно опционально экспортировать её. И подключаете этот пакет везде, где нужен доступ до этой переменной.
Код

package Config;

use base 'Exporter';
our @EXPORT = qw($CFG);

our $CFG = {};

1;


Код

use Config;

$CFG{what} = 'this';



--------------------
PM MAIL   Вверх
cyberblade
Дата 17.2.2012, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


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

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


 




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


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

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