Perlinio modulio pavyzdys
Vakar IRC buvau paklaustas, kaip yra daromi objektiniai Perlo moduliai. Parašiau ir paprastą moduliuką, kuris parodo kaip veikia visas Perlo objektiškumas. Štai modulis Modulis.pm
:
package Modulis;
use strict;
use warnings;
sub naujas {
bless {};
}
sub vardas {
my $self = shift;
$_[0] ? $self->{'vardas'} = $_[0]
: $self->{'vardas'};
}
1;
Modulis prasideda paketo apibrėžimu (package Modulis;
) bei aprašo dvi funkcijas (tiksliau vieną funkciją ir vieną metodą). Funkcija naujas
sukuria ir grąžina naują objektą Modulis
. Tam paprasčiausiai užtenka palaiminti su bless
nuorodą į tuščią asociatyvų masyvą (hešą). Metodas vardas
gali būti kartu naudojamas tiek reikšmės nustatymui, tiek gavimui. Jei jį iškviesime be jokių parametrų, jis grąžins objekto kintamojo ‘vardas’ (kuris tėra tik įrašas asociatyviajame masyve) reikšmę. Jei šį metodą iškviesime su argumentu, jis priskirs šio argumento reikšmę objekto kintamajam ‘vardas’ (būtent
tai ir atlieka antra metodo eilutė su trinariu ?: operatoriumi – pasižiūri ar perduotas argumentas, ir jeigu taip, tai pakeičia ‘vardas’ reikšmę) Metodas nuo paprastos funkcijos skiriasi tik tuo, kad jam pirmu argumentu yra perduodamas pats objektas. Todėl pirmoji metodo eilutė yra my $self = shift;
– ja mes kintamajam $self
priskiriam „savo paties objekto“ reikšmę. Toliau $self
veikia panašiai kaip $this
PHP kalboje.
O štai paprastas pavyzdys kaip naudotis šiuo objektiniu moduliu:
#!/usr/bin/perl -wl
use strict;
use Modulis;
my $a = naujas Modulis; # sukuriam objektą
$a->vardas('Petras'); # užsetinam per metodą
print $a->vardas; # gettinam per metodą
$a->{'vardas'} = "Vytas"; # užsetinam per kintamąjį
print $a->{'vardas'}; # gettinam per kintamąjį