Здесь всё выглядит нормально, но в переменной $config лежит строка, а не хеш или таблица, при которых бы сработало $avail[$self.config.$name] Лучше бы хеш, конечно)
Где вызывается метод init и что в него передаётся?
Если я правильно понял, то входных параметров нет, поэтому и выскакивает ошибка? Самое интересное, что сайт, который я разбираю на локалхосте успешно работает на хостинге сейчас точно с таким же кодом и не генерирует ошибок.
Тогда ответ прост -- там более новая версия парсера. Получается пустая_строка.yandex-search В последней версии парсера это не вызывает ошибку, раньше вызывало. Если я правильно, помню, конечно)
А разве не надо оборачивать переменные которые используются как свойство для доступа к чему либо в []
Как-то так $avail[$self.config.[$name]] B и скорее всего правильно будет написать так ^if(def $avail[$self.config.[$name]]...)
Да и вообще условие какое-то не правильное ^if(!def $avail || def $avail && $avail == 1) Если(неопределенно $avail ИЛИ Определено И Равно 1). Как-то не логично все написано, сложно понять, что хотел автор.
скобки вообще не обязательны. они, как и скобки в выражениях, могут требоваться, чтобы изменить "порядок обработки по умолчанию". но в данном случае никаких разночтений быть не может. а в следующем случае они [B]могли-бы[/B] потребоваться:
$var.[$field].name
т.к. данный код вообще без скобок означает:
$var.[$field.name]
условие абсолютно нормальное: значение не определено или равно 1. что не так? да, я-бы выкинул def $avai за ненадобностью.