[Perl] Ламерский вопрос про require и our
неправильно. perldoc strict
> Просто встречал варианты, когда в главном файле дополнительно объявляют переменную с этим же именем с помощью our (или use vars).
это более правильно, но, имхо, не кошерно.
our — это ассоциация имени переменной с текущем пакетом. в данном случае our не будем выделять для нее память, в отличии от my
> И почему в cfg.pl нельзя писать my $tmp? Это из-за того, что require помещает содержимое cfg.pl в отдельный блок?
да. require аналогично eval (если выкинуть всякие проверки на двойное включение). perldoc -f require, там расписано require в виде кода.
> Как вообще правильно поступать в таких случаях?
perldoc perlmod в районе @EXPORT и perldoc vars.
особые эстеты переопределяют import.
неправильно. perldoc strictда, точно, спасибо.
да. require аналогично eval (если выкинуть всякие проверки на двойное включение). perldoc -f require, там расписано require в виде кода.ага, я смотрел этот пример, там такого рода импликация require->do->eval. На всякий случай поинтересовался об eval
perldoc perlmod в районе @EXPORT и perldoc vars.это посмотрю, хотя многое урывками уже видел. Еще где-то прочитал, что сейчас предпочтительнее использовать our вместо use vars.
Спасибо!
P.S. А не подскажете, где прочитать о local, my, our в компактном виде?
Не совсем, там есть различия
johnny:> cat 2.pl
#!/usr/bin/perl
#
package foo;
use vars qw/$x/;
$x = 1;
our $y = 2;
package bar;
print "$x\n";
print "$y\n";
johnny:> ./2.pl
2
johnny:>
> P.S. А не подскажете, где прочитать о local, my, our в компактном виде?
программинг перл с верблюдом
Буду разбираться.
Оставить комментарий
Geddi-S
Есть конфигурационный файл ./include/cfg.pl:Подключаю его с помощью require в основном файле main.pl:
Теперь я могу использовать переменную $tmp в main.pl без какого-то ни было объявления. Правильно ли это?
Просто встречал варианты, когда в главном файле дополнительно объявляют переменную с этим же именем с помощью our (или use vars).
Как вообще правильно поступать в таких случаях? И почему в cfg.pl нельзя писать my $tmp? Это из-за того, что require помещает содержимое cfg.pl в отдельный блок?
Заранее спасибо.