AUTOLOAD pozwala na dynamiczne przetwarzanie wywołań nieistniejących metod lub funkcji w pakiecie. Jest to wygodne do tworzenia obiektów proxy, dynamicznie generowanych metod (ORM), wdrażania logiki leniwie ładującej itp.
AUTOLOAD:package MyAuto; sub AUTOLOAD { our $AUTOLOAD; my ($self, @args) = @_; my ($method) = $AUTOLOAD =~ /::(\w+)$/; print "Wywołano $method z @args "; } package main; my $obj = bless {}, 'MyAuto'; $obj->any_method(1,2,3); # Wywoła AUTOLOAD
new, DESTROY.Pytanie: Czy AUTOLOAD zostanie wywołane, jeśli spróbujemy wywołać nieistniejący konstruktor new?
Odpowiedź: Nie. Perl szuka konstruktora new bezpośrednio w pakiecie i nie wywołuje AUTOLOAD dla niego, jeśli nie zostanie znaleziony. AUTOLOAD jest wywoływany tylko przy wywołaniu zwykłych metod, a nie przy próbie stworzenia obiektu przez Class->new().
package Foo; sub AUTOLOAD { print "AUTOLOAD! "; } # $obj = Foo->new(); # Błąd: Can't locate object method "new" ...
Historia W usłudze kryptograficznej poprzez AUTOLOAD zrealizowano proxy wielu jednorodnych metod. Pewnego razu zapomniano obsłużyć sytuację z metodą DESTROY, i przy finalizacji obiektów wystąpiły nieskończone wywołania rekurencyjne, co doprowadziło do awarii skryptu.
Historia W ORM używano AUTOLOAD do magii dostępu do pól, ale nie zaimplementowano poprawnego zwracania wartości, gdy metoda rzeczywiście nie istnieje. Z tego powodu perl zamiast "Can't locate..." zwracał zawiłe komunikaty, a błędy pojawiały się tylko w odpowiedziach na produkcji.
Historia Podczas refaktoryzacji usunięto część rzeczywistych metod, przez co wszystkie wywołania poszły przez AUTOLOAD. Z tego powodu wydajność dużych zadań nagle spadła (przetwarzanie tablicy z milionami obiektów stało się 10-15 razy dłuższe niż przed refaktoryzacją).