В качестве обходного пути мы создали небольшую Java-программу, которая позволяет вам передавать HTTP-запросы через SSL-туннель с поддержкой CAC. См. cac-agent .
Это хорошо сработало для нас, позволяя всем службам работать с одним и тем же обратным прокси, но мы все еще открыты для других подходов.
Ну, поскольку Вы конкретно заявляете, что хотите предупредить в случаях use Mod qw<:oldmode>;
Это работает лучше:
package Foo;
use base qw<Exporter>;
use Carp qw<carp>;
...
sub import {
#if ( grep { $_ eq ':oldmode' } @_ ) { # Perl 5.8
if ( @_ ~~ ':oldmode' ) { # Perl 5.10
carp( 'import called with :oldmode!' );
}
goto &{Exporter->can( 'import' )};
}
Благодаря Frew, для упоминания Perl 5.10 умный синтаксис соответствия. Я изучаю все способы работать Perl 5.10 в мой код.
Примечание: стандартный способ использовать средство экспорта в импорте sub состоит в том, чтобы или управлять $Exporter::ExportLevel
или звонить Foo->export_to_level( 1, @_ );
Но мне нравится путь выше. Это более быстро и, я думаю, более простой.
Вы пишете свое собственное sub import
в package Foo
это назовут со списком параметров от use Foo
.
Пример:
package Foo;
use Exporter;
sub import {
warn "called with paramters '@_'";
# do the real import work
goto &{Exporter->can('import')};
}
Таким образом в sub import
можно искать список аргументов тег устаревший и затем бросить предупреждение.
Обновление: Как Лесоруб указывает, необходимо звонить goto &{Exporter->can('import')}
. Эта форма goto заменяет текущий вызов подпрограммы на стеке, сохраняя текущие аргументы (если таковые имеются). Это необходимо, потому что импорт Средства экспорта () метод экспортирует в пространство имен своей вызывающей стороны.