Что такое @ISA в Perl?

С каждым пакетом ассоциирован свой собственный массив @ISA. В массиве хранится список базовых классов для данного пакета.

Как используется массив @ISA ?

Если внутри текущего класса встречается обращение к несуществующему методу, интерпретатор
начнет просматривать перечисленные в @ISA классы, надеясь найти запрашиваемый метод в них. Классы будут просматриваться в том порядке, как они определены в массиве @ISA.

Если метод и там не найден, интерпретатор обратится к предопределенному классу UNIVERSAL. UNIVERSAL - это базовый класс для всех классов, наследуется автоматически.

Если и там метода не обнаружено, несчастный интерпретатор начнет поиск подпрограммы AUTOLOAD в текущем классе, затем в перечисленных родительских классах.

Если подпрограмма найдена - она будет выполнена вместо запрашиваемого метода, с теми же параметрами. Если подпрограмма не найдена - интерпретатор вернет ошибку.

Пример:

Или так:

use base;

Для удобства работы с массивом @ISA, используется модуль прагмы - base. Прагма позволяет вовремя определить родительские классы для текущего класса.

Запись:

примерно эквивалентна коду: