Иногда мне нужна полезная функция полезности, например List::Util::max
в середине большой программы, которая делает много вещей. Так что, если яЛексически импортировать полезные функции в большой скрипт
use List::Util 'max';
В верхней части моей программы, я застрял с этим символом, загрязняя все мое пространство имен, даже если мне это нужно только в одной подпрограмме.
Так я думал о попытке другой шаблон, вместо этого:
use List::Util();
# a whole bunch of stuff later...
sub blah {
List::Util->import('max');
$blah = max @foobar;
...
}
Есть две проблемы с этим, хотя. Во-первых, он не автоматически unimport в конце блока (drat.) Мне пришлось бы отменить все с помощью unimport
.
Другая проблема заключается в том, что, по-видимому, прототипы не применяются правильно, поэтому я должен сказать max(@foobar)
вместо более красивой версии без буклета.
Есть ли простой способ временного импорта символов для блока, который автоматически удалил бы их в конце блока и который бы также правильно обрабатывал прототипы?
Это приведет к тонким ошибкам, если какой-либо 'max' имеет прототип, так как эффект от него сжигается во время компиляции. В 'max2' используется прототип из' main :: max', а не из списка List :: Util :: max'. Полезно, вы должны получить предупреждение о несоответствии прототипа при назначении. –
@ Эрик Стром - Хорошая мысль, что сосать. Используйте имя подпрограммы 'local' с осторожностью. – mob