Qual è la differenza tra genitore e base in Perl 5?
Soluzione
base
cercato di fare troppe cose - movimentazione automaticamente il caricamento dei moduli, ma anche consentono di stabilire l'eredità dalle classi già caricate (possibilmente da un file il cui nome non è stato in base al nome del modulo). Per una sorta di farlo funzionare, c'era qualche hackery che ha causato risultati sorprendenti in alcuni casi. Invece di interrompere la retrocompatibilità, un pragma parent
nuova, la sostituzione è stata introdotta con la semantica più puliti.
parent
sarà un modulo core di 5.10.1.
Aggiornamento:. ha dimenticato che base
gestisce fields
(se si utilizza il pragma fields
), che parent
non fa
Altri suggerimenti
Armati con l'extra po 'di informazioni da ysth, sono stato in grado di vedere le differenze nei documenti:
Il base
pragma fa le seguenti cose:
- aggiunge il pacchetto chiamato a
@ISA
- carica il modulo con lo stesso nome del pacchetto chiamato utilizzando
require
(a meno che non rileva che il pacchetto è già stato caricato) - non mancherà se un modulo con lo stesso nome del pacchetto non esiste
- muore se non ci sono simboli nel pacchetto chiamato
- se
$VERSION
non esiste nel pacchetto chiamato, base fissa a"-1, set by base.pm"
-
fields
del pacchetto chiamato se esistono - non chiama la funzione di importazione del pacchetto di nome
Il parent
pragma fa le seguenti cose:
- aggiunge il pacchetto chiamato a
@ISA
- carica il modulo con lo stesso nome del pacchetto chiamato utilizzando
require
- accetta un'opzione che dice di non morire se un modulo con lo stesso nome del pacchetto non esiste