Мне нужно изменить кучу скриптов, чтобы сделать эквивалент прямого стиля C, включающего умеренное количество переменных. После использования для их извлечения он должен действовать точно так же, как если бы была включена такая строка:
my $os_name = "Windows"; #declares the variable AND sets its value
Чтобы их можно было использовать в вызывающем скрипте. В модуле есть немного логики, которая условно устанавливает значения этих переменных. Все сценарии имеют строгое использование. Типичный вызывающий абонент имеет:
use strict;
use File::Basename;
use lib dirname (__FILE__);
use os_specific;
print "DEBUG os_name $os_name\n";
и модуль (os_specific.pm) имеет:
package os_specific;
use warnings;
use strict;
use Exporter;
our @EXPORT = qw($os_name);
our $os_name="Windows";
1
Но это не работает, есть предупреждения на этапе компиляции, например:
Global symbol "$os_name" requires explicit package name at caller.pl.
Таким образом, объявление переменной в модуле не действует в области действия вызывающей стороны.
Можно ли это сделать, или каждая из этих переменных также должна быть объявлена в caller.pl? (Все ответы, пожалуйста, используйте use strict - без этого это можно сделать с помощью требования. Это не работает с use strict, потому что это вызывает ошибку времени компиляции.)
Я знаю, что переменные из модуля можно использовать как $os_specific::os_name, вопрос в том, как это настроить, чтобы их можно было использовать просто как $os_name.
Спасибо.
os_specific
иOS_SPECIFIC
не одно и то же. - person choroba   schedule 28.05.2014perl -E "say $^O"
- person dolmen   schedule 28.05.2014