Sto attraversando un periodo difficile a capire l'intersezione di OO Perl e my $self = shift;
La documentazione su questi singoli elementi è ottima, ma nessuno di loro ha trovato il modo di lavorare insieme.
Ho usato Moose per creare moduli con attributi e, naturalmente, è utile fare riferimento all'attributo di un modulo all'interno di detto modulo. Mi è stato detto più e più volte di utilizzare my $self = shift;
all'interno di una subroutine per assegnare gli attributi del modulo a quella variabile. Questo ha senso e funziona, ma quando sto anche passando argomenti alla subroutine, questo processo prende chiaramente il primo elemento dell'array @ARGV
e lo assegna anche a $self
.
Qualcuno può offrire una spiegazione su come utilizzare shift per ottenere l'accesso interno agli attributi di un modulo, passando anche argomenti nell'array @ARGV
?
'shift' è impostato su' @ _' se chiamato da una subroutine o '@ ARGV' se chiamato dal codice di livello superiore. – cjm
@cjm Proprio come te. Ne parlerò nella risposta. – Nikhil
Fantastico. È molto utile. Mi sono imbattuto in un problema in cui il mio $ self = shift sembrava essere impostato sul primo argomento che ho effettivamente passato alla subroutine. Vale a dire, il primo elemento in @_ non era l'oggetto, ma era infatti il primo argomento che ho fornito. Qualche ragione di alto livello ciò potrebbe accadere? (Ho lavorato su questo problema e non ho più il codice attuale) –