Как я должен передать параметры в модуль на Perl, которая также экспортирует символы?


В тест::версии я хочу добавить параметры конфигурации, которые позволяют переключать определенные функции. Я подумываю о прохождении анонимного хэша на пользовательский импорт вроде так.

use Test::Version 1.2 qw( version_ok ), { is_strict => '1', has_version => '0' };

другие варианты я думал, включаемых переменных пакета (хотя более некрасиво, на мой взгляд).

use Test::Version 1.2 qw( version_ok );
$Test::Version::IS_STRICT   = 1;
$Test::Version::HAS_VERSION = 0;

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

use Test::Version 1.2 qw( version_ok ), +is_strict => '1', +has_version => '0';

Имейте в виду, что это имеет простой функциональный интерфейс, поэтому при передаче объектов, или с помощью конфигурационных файлов-это перебор. Какие-то предпочтения? или другие предложения?



144
2
задан 27 октября 2011 в 03:10 Источник Поделиться
Комментарии
2 ответа

Я бы держаться подальше от изменяющейся нормальной работы импорт(). Я никогда не видел смешайте модуль экспорта и конфигурации в то же время (может быть, вы, однако), так что оставь тех, из (варианты 1 и 3). Я думаю, что вы правы, думая, что вариант 2 не слишком красиво. Это оставляет нам ни один из этих вариантов.

Я думаю, вместо этого вы должны просто позволить называть version_ok и version_all_ok с нужным хэш.

version_ok({ is_string => 1, has_version => 0 });

Четкие и стандартные, ничего странного не происходит. От так оно выглядит как модуль будет использоваться это не нагрузка на пользователя (так как там обычно всего один звонок в ВСЕ ТЕСТЫ).

2
ответ дан 28 октября 2011 в 09:10 Источник Поделиться

Кроме того, передавая параметры импортируемой функции как aparker42 упомянули, Вы могли бы просто написать функцию настроить в свой пакет и работать с опционами нет.

package Test::version ;

#use vars qw($is_string $has_version) ;
# Instead of multiple configuration variables I personally would
# bundle them in a hash
# Filling the hash with defaults ... and it also makes the configure easier
use vars qw(%options) ;
%options = ( is_string => 0 ,
has_version => 1 ) ;

sub configure {
my ( $opthr ) = @_ ;
foreach my $key ( keys %{ $opthr } ) {
if( exists $options{$key} ) {
# Check if the given variable exists in the %options hash
$options{$key} = $opthr->{$key} ;
}
}
}

# Rest of the code here ...

1;

И с помощью модуля с

use Test::version qw(version_ok) ;
Test::version::configure( { is_string => 1 } ) ;

0
ответ дан 10 апреля 2012 в 12:04 Источник Поделиться