Автор Тема: Модули и глобальные переменные  (Прочитано 4026 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Troum

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Модули и глобальные переменные
« : 25 Ноября 2004, 01:30:32 »
Возникла следующая проблема

есть головной скрипт:

use strict;
use MyModule;
our $our_var;


.....

redirect($name);

и соответственно модуль MyModule;

package MyModule;
use strict;
our $our_var;

....

sub redirect(){
   my $name = shift;
   require $name;
   run();
}

Саб run() подгружаемого модуля оперирует с глобальной переменной $our_var. Однако она становиться undef (тоже и для MyModule::redirect()).

Подскажите, в чем ошибка

Оффлайн Troum

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Модули и глобальные переменные
« Ответ #1 : 25 Ноября 2004, 12:57:15 »
Решение было найдено добавлением в MyModule.pm строки:

*our_var = *main::our_var;

Все заработало, однако я получил варнинг:
Name "main::our_var" used only once: possible typo. Name "MyModule::our_var" used only once: possible typo

Как бы избавиться от него?
« Последнее редактирование: 25 Ноября 2004, 13:02:38 от Troum »

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Модули и глобальные переменные
« Ответ #2 : 25 Ноября 2004, 13:04:39 »
perldoc perldiag
Цитировать
Name "%s::%s" used only once: possible typo
           (W once) Typographical errors often show up as unique
           variable names.  If you had a good reason for having a
           unique name, then just mention it again somehow to
           suppress the message.  The "our" declaration is pro
           vided for this purpose.

           NOTE: This warning detects symbols that have been used
           only once so $c, @c, %c, *c, &c, sub c{}, c(), and c
           (the filehandle or format) are considered the same; if
           a program uses $c only once but also uses any of the
           others it will not trigger this warning.
The documentations is your friend

Оффлайн Troum

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 71
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Модули и глобальные переменные
« Ответ #3 : 25 Ноября 2004, 13:14:45 »
Ок. при добавлении строки:
our $our_var;
вторая часть варнинга исчезает

Но, как правильно избавиться от
Name "main::our_var" used only once: possible typo?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28