Ho mischiato la segnalazione di errori di battitura e di questioni tecniche.
Comunque mi pare un lavoro utile e fatto bene, visto che l'implementazione degli oggetti in Perl è potente, ma anomale ed ostica.
Complimenti.
cap 1 - prefazione
"si"
cap 2 - 2.1
evoluto si
ragruppamento
dettag li
ele mento
caratt eristiche
comples sa
indipendeti
struttu ra
impl ementazione
cap 2 - 2.2
na scondere
ac cesso
cap 2 - 2.3
ered itarietà
neces sità
cap 3
pa rametri
al difuori
mo dificato
un simil-codice
cap 4 - 4.2
meglio:
package Numeri;
$successione = [1,2,3,4,5,6,7];
bless ($successione, 'Numeri');
altrimenti non si capisce da dove viene 'Numeri'.
a pagina 12 scrivi:
"Come abbiamo detto in precedenza ogni metodo deve avere come primo parametro il nome della classe"
Ciò non mi risulta del tutto esatto, guarda i seguenti tre esempi di metodo:
codice:
sub inserisci {
my $this = shift;
my ($q) = shift;
my @parametri = @{$_[0]} if (@_);
$q =~ /INTO (\b\w+\b)/i;
my $tab = $1;
my $err = $this->{'error'};
my $dbh = $this->{'dbh'};
....
return 1;
}
Qui il metodo riceve solamente l'affare benedetto, che in questo caso è un reference ad un hash e dei suoi parametri.
codice:
sub stampa_header {
my $class = shift;
my $this = shift;
my $cgi = shift;
print $cgi->start_html(
-title => $this->{'titolo'},
-bgcolor => $this->{'bgcolor'},
-style => {-src => $this->{'css'}}
);
}
qui il metodo riceve il nome della classe, l'affare benedetto e i suoi parametri. In questo caso è così perchè questo metodo NON viene chiamato direttamente, ma viene usato da una sotto classe (che eredita da quella) che lo utilizza così:
codice:
sub stampa {
my $this = shift;
$this->SUPER::stampa_header($this,$cgi);
...
}
Infine vi sono metodi che non hanno bisogno di ricevere $this, ad esempio perchè privati:
codice:
my $connectDB = sub {
my $set = shift; # NON si tratta di $this travestito, ma di suoi parametri.
my $dbh;
my $err = $set->{'error'};
my $dsn = "DBI:$set->{'driver'}:database=$set->{'database'};host=$set->{'host'}";
$dbh = DBI->connect($dsn, "$set->{'userid'}", "$set->{'passwd'}", $set->{'options'}) ||
$err->errore('db','Non è stato possibile
connettersi al database',$DBI::errstr,$dbh,
'Tentativo di connessione al database');
return $dbh;
};
Comunque quanto sopra lo spieghi meglio, dopo, quando parli dei metodi, ma è opportuno non avere contraddizioni.
Alla fine del capitolo 6 è meglio aggiungere che per motivi di sicurezza quello che suggerivi è da NON FARE MAI.