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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переопределение переменной из плагина 
:(
    Опции темы
vgray
Дата 7.2.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



добрый день,

есть программа к которой могут подгружаться различные языковые модули
с помощью след кода 
Код

sub lang {
  my $lang = shift;

  eval "require Programm::Lang::$lang";

  ...

}



языковой модуль выглядит след образом

Код

package Programm::Lang::RU;

our $_LANG_DATA;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw($_LANG_DATA);

$_LANG_DATA = 'бла бла';

1;



не могу сообразить как сделть так чтобы в функции main::lang()
я эту переменную увидел
если делаю так 

Код


        require Programm::Lang::RU;
        $data =  $NC::Lang::RU::_LANG_DATA;
                return $data;



то все работает, а если пытаю динамически подгружить модуль то или нет результата или идет ошибка

Код


               eval "require NC::Lang::$lang";
               $data = ?????


подскажите что делать?
PM MAIL   Вверх
ginnie
Дата 7.2.2008, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



Уважаемый vgray, а в main::lang() переменную $_LANG_DATA не видно, она же экспортируется?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
vadiml
Дата 7.2.2008, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вы таки разберитесь чему Вы присваиваете данные:
Экспортируете Вы
Код

@EXPORT = qw($_LANG_DATA);

а ниже пишете:
Код

$data =  $NC::Lang::RU::_LANG_DATA;


зачем? если Вы экспортировали переменную, то и пользуйтесь ею напрямую: return $_LANG_DATA, 
только require надо заменить на use или самому вызвать функцию импорта.

а вообще я не понимаю зачем тут 'eval'

ЗЫ все же, если очень надо с eval, то надо $data = eval '....'
eval -- это почти {...}
PM MAIL Jabber   Вверх
ginnie
Дата 7.2.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



vgray, попробуйте по наводке vadiml написать

Код

eval "use Programm::Lang::$lang";
$data = $_LANG_DATA;



vadiml, eval нужет т.к. use и require требуют имени модуля в виде bareword.

Это сообщение отредактировал(а) ginnie - 7.2.2008, 15:30


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
vgray
Дата 7.2.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



) вы меня не так поняли, eval мне нужен что динамически подгружать модуль, а написать 

Код

eval "use Programm::Lang::$lang";
$data = $_LANG_DATA;


я не могу, так как в модуле main нет $_LANG_DATA и при use strict появится ошибка компиляции

попробую еще раз объяснить,
вот код модулей

Код

package Programm::Lang::RU;
our $_LANG_DATA;
use strict;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw($_LANG_DATA);
$_LANG_DATA = 'Русский';
1;

package Programm::Lang::EN;
our $_LANG_DATA;
use strict;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw($_LANG_DATA);
$_LANG_DATA = 'Английский';
1;



вот код главного модуля

Код

use strict;

sub lang {
  my $lang = shift;
  my $data;

  // Здесь нужно подключить модуль и присвоить $data значение переменной $_LANG_DATA
  // Не могу сообразить как это сделать

    return $data;

}


print lang('RU');



PM MAIL   Вверх
ginnie
Дата 7.2.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



vgray, попробуй

Код

our $_LANG_DATA;

eval "use Programm::Lang::$lang";
$data = $_LANG_DATA;



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
vadiml
Дата 7.2.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vgray, 

А скажите, пожалуйста, для чего тогда у Вас 
Код

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw($_LANG_DATA);


Добавлено через 2 минуты и 5 секунд
PS вообще-то надо писать
Код

require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw($_LANG_DATA);

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


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

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


 




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


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

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