Ecco cosa mi piacerebbe realizzare:Come potrei ridefinire una subroutine e mantenere quella precedente?
sub first {
print "this is original first";
}
*original_first = \&first;
sub first {
print "this is first redefined";
}
original_first(); # i expect this to print "this is original first"
first() # i expect this to print "this is first redefined"
ho pensato che salvando il simbolo per first
, sarei in grado di chiamare in seguito la subroutine originale (sotto il nome original_first
) e di essere anche in grado per chiamare first
e ottenere quello ridefinito. Tuttavia, se chiamo lo original_first
, ottengo ancora il messaggio "questo viene prima ridefinito". Cosa devo fare per farlo funzionare?
È possibile, quando si ridefinisce il simbolo 'first', per influenzare solo la parte del codice? – Geo
un assegnamento di un coderef (generato da sub {...}) a un typeglob sostituirà solo la voce CODE nel glob. qualsiasi altro tipo di dati nel glob non cambierà –
Puoi anche usare 'local * first = sub {...};' per sostituire la funzione solo all'interno di un blocco specifico. –