|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Konstantin Tokar 2:5020/400 23 Jun 2002 21:05:03 To : Ildar Subject : Re: Странности с переменными -------------------------------------------------------------------------------- Ildar wrote: > > привет, > > 1. есть скрипт test.pl: > #!/usr/bin/perl > use StTest; > > print("Before f1\n"); > StTest::f1(); > print("Before f2\n"); > StTest::f2(); > > 2. есть модуль StTest.pm: > package StTest; Тут надо вставить use strict; тогда ты получил бы всякие предупреждения. > > require Exporter; > @ISA = qw(Exporter); > @EXPORT = qw( ); Эти три строки у тебя ничего не делают и не нужны > > my $var = ''; попробуй объявить $var как глобальную переменную use vars qw($var); BEGIN{ $var=''; #Это в общем не очень нужно } > > sub f2 > { > print "var = $var\n"; > }; > > sub f1 > { > $var = "value"; > print "var = $var\n"; > }; > > 1; > > Все нормально работает: > Before f1 > var = value > Before f2 > var = value > > Hо при этом происходит следующая странность - если описание переменной > $var (my $var = '') опустить ниже (sub f2), то перестает работать: > Before f1 > var = value > Before f2 > var = > > Я не могу понять - это нормальное поведение или какой-либо баг. Баг - не использовать use strict; все остальное - правильно. Багов в перле немного, и выходят они на поверхность не в таких простых случаях. > Если это нормальное поведение, то можно от него избавиться, > т.е. сделать так, чтобы $var был виден в независимости от > относительного положения касательно f2() ? объявить как use vars qw($var); И ИСПОЛЬЗОВАТЬ use strict; во всех даже самых простых программах!!! --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/127707e684bce.html, оценка из 5, голосов 10
|