Я хочу знать внутреннюю работу метода импорта. Когда я искал то же самое, он отображал только, как использовать импорт в perl, чего я не требую.Внутренняя работа по импорту модуля в perl?
ответ
Это зависит от каждого модуля, чтобы обеспечить метод import
, если он хочет его предоставить. Большинство, которые делегировать задачу модуля Exporter, используя код, как
use Exporter qw(import);
или старшего
use Exporter qw();
our @ISA = 'Exporter';
Если это import
метод, о котором вы спрашиваете, пожалуйста, обратитесь к the module's documentation для получения дополнительной информации.
Если, с другой стороны, вы спрашиваете, как динамически добавлять подпрограмму в пространстве имен, то это просто вопрос о присвоении суб реф к Глоб. Это означает, что
sub foo { ... }
примерно эквивалентно
BEGIN { *foo = sub { ... }; }
так что вы хотите
no strict qw(refs);
*{ $dst_pkg . '::' . $sub_name } = \&{ $src_pkg . '::' . $sub_name };
Когда я искал для того же он отображается только, как использовать импорт в Perl, которого я не требую. Я хочу знать внутреннюю работу метода импорта .
Если вы хотите знать внутренности, проверьте внутренние элементы, то есть источник.
Ниже приведено то, что import
подпрограмма от Exporter
модуль делает. Пройдите через него, обратитесь к документации и Google, если вам не известны некоторые «ключевые слова». Если вы не найдете ответа, то спросите здесь о SO.
sub import {
my $pkg = shift;
my $callpkg = caller($ExportLevel);
if ($pkg eq "Exporter" and @_ and $_[0] eq "import") {
*{$callpkg."::import"} = \&import;
return;
}
# We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
my $exports = \@{"$pkg\::EXPORT"};
# But, avoid creating things if they don't exist, which saves a couple of
# hundred bytes per package processed.
my $fail = ${$pkg . '::'}{EXPORT_FAIL} && \@{"$pkg\::EXPORT_FAIL"};
return export $pkg, $callpkg, @_
if $Verbose or $Debug or $fail && @$fail > 1;
my $export_cache = ($Cache{$pkg} ||= {});
my $args = @_ or @_ = @$exports;
if ($args and not %$export_cache) {
s/^&//, $export_cache->{$_} = 1
foreach (@$exports, @{"$pkg\::EXPORT_OK"});
}
my $heavy;
# Try very hard not to use {} and hence have to enter scope on the foreach
# We bomb out of the loop with last as soon as heavy is set.
if ($args or $fail) {
($heavy = (/\W/ or $args and not exists $export_cache->{$_}
or $fail and @$fail and $_ eq $fail->[0])) and last
foreach (@_);
} else {
($heavy = /\W/) and last
foreach (@_);
}
return export $pkg, $callpkg, ($args ? @_ :()) if $heavy;
local $SIG{__WARN__} =
sub {require Carp; &Carp::carp} if not $SIG{__WARN__};
# shortcut for the common case of no type character
*{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_;
}
Полный источник: https://metacpan.org/source/TODDR/Exporter-5.72/lib/Exporter.pm
- 1. Каковы обязательные шаги по импорту модуля?
- 2. внутренняя работа по размещению новых?
- 3. SOLR данные по импорту
- 4. Работа модуля по отрицательным номерам
- 5. Внутренняя работа таймера
- 6. Внутренняя работа Enum.GetValues ()
- 7. Внутренняя работа JSF 1.2
- 8. Внутренняя работа с намерением.getextras()
- 9. Внутренняя работа Array.prototype.slice.call()
- 10. Внутренняя работа СУРБД
- 11. Как работает внутренняя работа?
- 12. Внутренняя работа Google Кошелька
- 13. Внутренняя работа с HTML?
- 14. Внутренняя работа списка в C#
- 15. Рекомендация по импорту SciPy/NumPy
- 16. Пустые строки по специализированному импорту
- 17. Рекомендации по импорту для установленного пакета
- 18. Внутренняя работа Cassandra без объединений
- 19. Внутренняя работа стандартной библиотеки C
- 20. Работа модуля по другую сторону уравнения?
- 21. componentDidUpdate внутренняя работа меня смущает
- 22. Услуги по импорту в Firefox WebExtension
- 23. Комбинатор Внедрение и внутренняя работа
- 24. Внутренняя работа вызова Integer ('string')?
- 25. Внутренняя работа больше или меньше
- 26. Внутренняя работа cts: регистрация запросов
- 27. Работа модуля в Mitsubishi PLC
- 28. В Haskell, какова внутренняя работа понимания списка?
- 29. Внутренняя работа 'use strict' в javascript
- 30. Внутренняя работа асинхронного блока в программе iOS?
Это поможет нам обеспечить полезный ответ, если бы вы описать, почему вы задаете вопрос. Что вы будете делать с информацией? – Borodin