Di recente ho passato molto tempo a eseguire il debug di uno script e, quando finalmente ho riscontrato il problema, è stato a causa di un codice simile al seguente:
class Foo {
has $.bar;
method () {
# do stuff
$!.bar;
}
}
Si è scoperto che il problema era quello $!.bar
, che avrebbe dovuto essere $!bar
o $.bar
. Capisco questo.
Ma perché questo non muore ?
Guardando a questo più in dettaglio, sembra che il problema qui è che sto cercando di chiamare un metodo (inesistente) bar
su $!
, che a questo punto è Nil
perché non ci sono stati errori.
E sembra che in realtà posso chiamare qualsiasi metodo che desidero Nil
e tutti tornano silenziosamente Nil
, comprese cose come Nil.this-is-a-fake-method
e Nil.reverse-entropy(123)
.
Questa è una caratteristica? In tal caso, qual è la logica?