|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Sapozhnikov 2:5020/400 11 Jul 2002 21:15:11 To : Dmitry Koteroff Subject : еще раз об экспорте [Was: Открытое письмо...] -------------------------------------------------------------------------------- Dmitry Koteroff wrote: > Hу так исправлю, что ж с того... Оно дело, дыра в реализации, а другая - > в идее. Тут ведь вот какая интересная закавырка получается. Есть два варианта, человек пишет аккуратно (используя use strict и соответственно объявляя все используемые переменные) или неаккуратно (без use strict и не объявляя). Теоретически вариант того, что человек объявляет все, но не пишет use strict существует, но практически он равен нулю. Ибо смысла нет просто в экономии одной строки. Так вот в первом варианте, выгоды от экспорта всех переменных в вызывающий неймспейс ему нет никакой (здесь и далее в примерах $a и $b - "внутренние" глобальные переменные скрипта, а $x и $y - импортированные из параметров): Вариант 1: use strict; our($x, $x); use CGI::WebIn (1); print "a=$a\n"; выдаст ошибку "Global symbol "$a" requires explicit package name at ..." Вариант 2: use strict; our ($x, $x); use CGI::WebIn (1); our ($a, $b); print "a=$a\n"; сработает, но требует явного перечисления всех импортируемых переменных, что делает его не более привлекательным чем, например: use strict; use vars qw($x $x); use CGI::WebIn; our ($a, $b) = @IN{'a', 'b'}; либо пользоваться полными именами переменных: use strict; our ($x, $x); use CGI::WebIn; print "a=$main::a\n"; что не только не короче работы с $IN{a}, но еще и может вызвать справедливый варнинг типа: "Name "main::a" used only once: possible typo at ..." В случае же когда автор не объявляет переменные (и не пользует strict) - не работает Ваша защита данных при экспорте. Андрей P.S. OFF3: > > Так у Вас это по историческим причинам (хотя релиз perl5 вышел > > еще в 1994 году) или Вам требуется именно cheat? > > По историческим. Восемь лет, более чем срок для того, чтоб избавиться от "тяжелого наследия". Описание переменных our Вы ведь быстро усвоили, а оно весьма свежее. OFF4: > >Дмитрий, этот модуль более стандартен чем Ваш. > > При чем тут "стандартность" моего модуля, простите? Речь же шла о том, что > его HЕТ у многих (если не сказать у большинства) хостеров. Так ведь и Вашего у большинства хостеров нет. Раз они смогли собрать Ваш, что мешает им собрать тот, от которого Ваш зависит? Благо сделать это даже проще, используя perl -MCPAN ... --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/5284976f80b6.html, оценка из 5, голосов 10
|