_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/our - deklaruoti ir priskirti paketo kintamąjį (lexical scoping)
  • our EXPR
  • our EXPR TYPE
  • our EXPR : ATTRS
  • our TYPE EXPR : ATTRS

    our deklaruoja surikiuotus kintamuosius kaip legalius globalsus apsuptame bloke, faile arba eval. T.y. tos pačios galiojimo srities taisykles kaip ir "my" deklaracijai, bet šiuo atveju nėra sukuriamas lokalus kintamasis. Jei išvardinta daugiau negu viena reikšmė, sąrašas privalo būti pateiktas skliaustuose. our deklaracija neturi semantinio efekto, nebent naudojamas "use strict vars", kuriuo atveju šis leidžia naudoti deklaruotą globalųjį kintąmąjį be jį apibudinančio paketo vardo. (Bet tik leksinėje our veikimo srities deklaracijoje. Tuo jis skiriasi nuo "use vars", kurio veikimo sritis priklauso nuo paketo.)

    our deklaracija deklaruoja globalų kintamąjį, kuris bus matomas visoje leksikalinėje veikimo srityje, netgi už paketo ribų. Paketas, kuriame kintamasis yra įvestas, yra laikomas deklaracijos vieta, ne panaudojimo vieta. Tai reiškia, kad toks elgesys reiškia:

        package Foo;
        our $bar;		# deklaruoja $Foo::bar likusiai leksikalinei sričiai
        $bar = 20;
        package Bar;
        print $bar;		# išveda 20

    Kelios our deklaracijos toje pačioje leksinėje sritye leidžiama, jei jos atliekamos skirtinguose paketuose. Jei taip atsitinka tame pačiame pakete, Perl duos įspėjimą ar tikrai to buvo norėta.

        use warnings;
        package Foo;
        our $bar;		# deklaruoja $Foo::bar likusiai leksinei sričiai
        $bar = 20;
        package Bar;
        our $bar = 30;	# deklaruoja $Bar::bar likusiai leksinei sričiai
        print $bar;		# išveda 30
        our $bar;		# išveda įspėjimą

    our deklaracija taip pat gali turėti sąrašą atributų, susietų su juo.

    Tikslios TYPE ir ATTRS semantikos ir interfeisai yra vis dar vystomi. TYPE kol kas apribotas naudojimui fields pragmoje, o atributai valdomi naudojant attributes pragmą, arba pradedant nuo Perl 5.8.0 taip pat per Attribute::Handlers modulį. Žr. "Private Variables via my()" perlsub'e dėl daugiau detalių ir fields, attributes ir Attribute::Handlers.

    Vienintelis dabar atpažįstamas our() atributas yra unique, kuris nurodo, kad vienintelė globalo kopija turėtų būti panaudojama visų interpretatorių, kuriuos programa sutinka, vykdoma daugiainterpretacinėje aplinkoje. (Elgesys pagal nutylėjimą būtų kiekvienam interpretatoriui turėti savo kopiją.) Pavyzdžiai:

        our @EXPORT  o>: unique = qw(foo);
        our %EXPORT_TAGS  o>: unique = (bar => [qw(aa bb cc)]);
        our $VERSION  o>: unique = "1.00";

    Įsidėmėkite, kad šis atributas taip pat gali padaryti globalą readonly, jei pirmas interpretatorius yra klonuojamas (pvz, kai sukuriama pirma nauja gija (thread)).

    Daugiainterpretacinės aplinkos gali tapti tokiomis arba per fork() emuliaciją Windowsinėse platformose arba įterpiant perlą į daugiagiję (multithread) aplikaciją. unique atributas nieko nedaro visose kitose aplinkose.

    Įspėjimas: dabartini šio atributo įgyvendinimas operuoja typeglob'u, susietu su kintamuoju; tai reiškia, kad our $x o>: unique taip pat turi our @x o>: unique; our %x o>: unique efektą. Tai gali ateityje keistis.

algirdas@perl.lt 2005.04.11 - $dabar