Sembra esserci un nuovo pragma denominato parent
che fa approssimativamente la stessa cosa di base
. Cosa fa parent
che garantisce un nuovo modulo (non core)? Mi manca qualcosa?Qual è la differenza tra parent e base in Perl 5?
risposta
base
ha provato a fare troppe cose — gestendo automaticamente i moduli di caricamento ma consentendo anche di stabilire l'ereditarietà dalle classi già caricate (possibilmente da un file il cui nome non era basato sul nome del modulo). Per fare in modo che funzionasse, ci sono stati degli hackery che hanno causato risultati sorprendenti in alcuni casi. Anziché interrompere la compatibilità con le versioni precedenti, è stato introdotto un nuovo pragma di sostituzione parent
con semantica più pulita.
parent
sarà un modulo principale a partire da 5.10.1.
Aggiornamento: dimenticato che base
gestisce fields
(se si utilizza il pragma fields
), che parent
non fa.
, armati con il 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 denominato utilizzando
require
(a meno che non rilevi che il pacchetto è già stato caricato) - non avrà esito negativo se un modulo con th e stesso nome del pacchetto non esiste
- trafile se non ci sono simboli nel pacchetto chiamato
- se
$VERSION
non esiste nel pacchetto chiamato, base imposta per"-1, set by base.pm"
- inizializza la
fields
del pacchetto chiamato se esistono - non chiama la funzione di importazione del pacchetto chiamato
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 doesn' Esistono
Quasi. L'opzione norequire dice semplicemente di non eseguire la richiesta (quindi la classe deve essere già caricata). Ciò significa che non deve intrappolare gli errori e decidere se debbano essere soppressi o meno. – ysth
Inoltre, confrontare perl -wE'say richiede base 'a perl -wE'say require parent' – ysth