|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 16 Sep 2004 21:20:44 To : Dmitriy Zverev Subject : Re: глобальные переменные -------------------------------------------------------------------------------- Dmitriy Zverev пишет: > AC>>> use strict; > AC>>> package main; > AC>>> our $var = 'value'; > AC>>> package MyPackage; > AC>>> ... > ??>> > ??>> А если несколько файлов с пакаджами и они друг в друга включаются > ??>> require'ми? > ??>> > KT> Тогда твои глобальные переменные будут одной из причин > KT> неработоспособности программы. > > > :-) > > Т.е. никак? Импортировать переменные из некоторого общего пространства имен. В простейшем варианте из того же 'main'. При этом в main они могут быть и не объявлены - сами создадутся (как $cc): ==> x.pl <== #!/usr/bin/perl -w use strict; our $aa = 'initial'; our @bb = (); sub p { print "We are in ", __PACKAGE__, ", file ", __FILE__, "\n"; print " aa=$aa\n"; print " bb=(", join(',',@bb), ")\n"; print "changing variables...\n"; $aa = __FILE__; @bb = (__PACKAGE__, __FILE__, __LINE__); } p(); p(); require "y.pm"; &y::p(); &z::p(); &zz::p(); &y::p(); p(); ==> y.pm <== package y; use strict; use vars qw($aa @bb $cc); BEGIN { *aa = \$main::aa; *bb = \@main::bb; *cc = \$main::cc; }; sub p { print "We are in ", __PACKAGE__, ", file ", __FILE__, "\n"; print " aa=$aa\n"; print " bb=(", join(',',@bb), ")\n"; print "changing variables...\n"; $aa = __FILE__; @bb = (__PACKAGE__, __FILE__, __LINE__); $cc = 'Set-in-y.pm'; require "z.pm"; } 1; ==> z.pm <== package z; use strict; use vars qw($aa @bb $cc); BEGIN { *aa = \$main::aa; *bb = \@main::bb; *cc = \$main::cc; }; sub p { print "We are in ", __PACKAGE__, ", file ", __FILE__, "\n"; print " aa=$aa, cc=$cc\n"; print " bb=(", join(',',@bb), ")\n"; print "changing variables...\n"; $aa = __FILE__; @bb = (__PACKAGE__, __FILE__, __LINE__); $cc = __PACKAGE__; require "zz.pm"; } 1; ==> zz.pm <== package zz; use strict; use vars qw($aa @bb $cc); BEGIN { *aa = \$main::aa; *bb = \@main::bb; *cc = \$main::cc; }; sub p { print "We are in ", __PACKAGE__, ", file ", __FILE__, "\n"; print " aa=$aa, cc=$cc\n"; print " bb=(", join(',',@bb), ")\n"; print "changing variables...\n"; $aa = __FILE__; @bb = (__PACKAGE__, __FILE__, __LINE__); $cc = __PACKAGE__; } 1; -- Андрей --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65774a658d19.html, оценка из 5, голосов 10
|