я хотел бы иметь возможность создавать «призрачные» пакеты и подписки. У меня есть файл конфигурации (ini) с такими записями:
[features]
sys.ext.latex = off
gui.super.duper.elastic = off
user.login.rsa = on
Этот файл анализируется, и позже разработчики могут задавать такие вопросы, как:
if ( MyApp::Feature->enabled ( 'user.login.rsa' ) { ... }
(Вся идея основана на FeatureToggle Мартина Фаулера http://martinfowler.com/bliki/FeatureToggle.html а>)
Используя AUTOLOAD для перехвата вызовов в MyApp::Feature и блок BEGIN для разбора ini-файла, мы можем предоставить этот API:
if ( MyApp::Feature->user_login_rsa ) { ... }
Вопрос в том, можно ли создать следующий API:
if ( MyApp::Feature::User::Login::RSA ) { ... }
имея только MyApp::Feature?
Нижний, верхний регистр можно изменить в файле конфигурации, здесь это не проблема. И уточните, реализация отделена от конфигурации, нет никакого MyApp::Feature::User::Login::RSA и никогда не будет. Реализация этой функции лежит напр. в MyApp::Humans.
Я знаю, что размещение MyApp::Feature::Foo::Bar предполагает, что такой Package должен быть. Но разработчики знают соглашение о том, что пакет функций управляет переключением функций, и у них не будет проблем с этим. Я нахожу первый пример (с использованием enabled( $string ) слишком сложным для чтения
if ( package::package->method ( string ) )
второй лучше:
if ( package::package->method )
третий будет еще проще:
if ( package::package::package )
Итак, можно ли имитировать АВТОЗАГРУЗКУ на уровне пакета?
Привет, Роб.
MyApp::Feature::User::Login::RSA
строго не проходит, это пустое слово. Вы можете сделать последнюю часть вызовом функции, таким образом:MyApp::Feature::User::Login::RSA()
- person daxim   schedule 15.03.2012