Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: глобальные переменные   Andrey Sapozhnikov   16 Sep 2004 21:20:44 
Архивное /ru.perl/65774a658d19.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional