#=pod use strict; use warnings; use constant SCALAR => 4; use constant ARRAY => [23, 'AAC', 'GGT']; use constant HASH => {'AC' => 20, 'AA' => 45, 'GG' => 15}; print 'constanta SCALAR este: ',SCALAR,"\n"; print 'constanta ARRAY are adresa: ',ARRAY,"\n"; print 'constanta ARRAY[0] este: ',ARRAY->[0],"\n"; print 'constanta HASH{GG} este: ',HASH->{GG},"\n"; my $adunare = HASH->{GG} + HASH->{AA}; print "Rezultatul adunarii celor doua constante: $adunare"; #=cut # După cum se observă, constantele sunt doar adrese/referinte. # Din această cauză nu apar simbolurile $ @ %. Numele constantei # este asociat cu adresa la care se stochează valoarea/valorile acesteia. # Dacă referă o unică valoare atunci este o referință către un scalar. # Dacă referă o structură complexă atunci poate fi un array [], un hash {} # sau o combinație dintre toate aceste tipuri de date realizată în același mod # ca în exemplele ce evidențiază referințele anonime. # Întruct constantele nu poartă simbolurile $ @ %, dereferirea se poate face numai # cu ajutorul operatorului -> combinat cu [] {}. # Dereferiri de genul @$ARRAY sau %$HASH nu sunt acceptate. #=pod use strict; use warnings; use constant SPEED_OF_LIGHT => 299792458; # m/s use constant DATA => { Mercury => [0.4, 0.055 ], Venus => [0.7, 0.815 ], Earth => [1, 1 ], Mars => [1.5, 0.107 ], Ceres => [2.77, 0.00015 ], Jupiter => [5.2, 318 ], Saturn => [9.5, 95 ], Uranus => [19.6, 14 ], Neptune => [30, 17 ], Pluto => [39, 0.00218 ], Charon => [39, 0.000254 ], }; use constant PLANETS => [sort keys %{(DATA)}]; # Atenție la dereferirea %{(DATA)} # În PERL constantele cu structură complexă, la atribuiri, se comportă strict în mod listă, # altfel spus, dacă în exemplul de mai sus se elimină () și rămâne doar %{DATA} # se obține doar Mercury, Venus, ..., Charon, o simplă listă inutilă pentru funcția keys. # Se știe că o variabilă array se inițializează astfel: @var = (Mercury, Venus, ..., Charon); # Parantezele introduse în jurul (DATA) generează exact array-ul de care are nevoie keys. # Lista: Mercury, Venus, ..., Charon nimerește în () și se obtine (Mercury, Venus, ..., Charon). print 'Constanta DATA reprezinta: ',DATA,"\n"; print 'Constanta PLANETS este o referinta la un array: ',PLANETS,"\n"; print 'Viteza luminii are valoarea: ',SPEED_OF_LIGHT,' m/s',"\n"; print 'Daca se citeste DATA->{Earth} aceasta este: ',DATA->{Earth},"\n"; print 'Daca se citeste DATA->{Venus}->[0] aceasta este: ',DATA->{Venus}->[0],"\n"; print 'Daca se citeste PLANETS->[5] aceasta este: ',PLANETS->[5],"\n"; #=cut #=pod use strict; use warnings; use Readonly; # acest modul crează posibilitatea de a desemna variabile care nu pot fi modificate. Readonly my $SPEED_OF_LIGHT => 299792458; # m/s Readonly my %DATA => ( Mercury => [0.4, 0.055 ], Venus => [0.7, 0.815 ], Earth => [1, 1 ], Mars => [1.5, 0.107 ], Ceres => [2.77, 0.00015 ], Jupiter => [5.2, 318 ], Saturn => [9.5, 95 ], Uranus => [19.6, 14 ], Neptune => [30, 17 ], Pluto => [39, 0.00218 ], Charon => [39, 0.000254 ], ); Readonly my @PLANETS => sort keys %DATA; print 'Variabila %DATA stocheaza o referinta: ',"\n"; print %DATA,"\n\n"; print 'Invocarea $DATA{Earth} conduce la afisarea unei adrese:',"\n"; print "$DATA{Earth}\n"; print 'Invocarea $DATA{Mars}->[0] conduce la afisarea unei valori:',"\n"; print "$DATA{Mars}->[0]"; #=cut # http://neilb.org/reviews/constants.html # A review of CPAN modules that can be used to define or work with constants.