インポートメソッドの内部作業を知りたい。私が同じものを検索したときには、perlでのインポートの使い方しか表示されていませんでした。perlでモジュールをインポートする内部作業ですか?
0
A
答えて
3
提供する場合は、import
メソッドを提供することは各モジュールに任されています。これは、あなたが求めているかについてimport
方法がある場合は
use Exporter qw(import);
歳以上
use Exporter qw();
our @ISA = 'Exporter';
のようなコードを使用して輸出モジュールにタスクを委任しないこと大半は、より多くの情報のためthe module's documentationを参照してください。
、他の一方で、あなたが動的に名前空間にサブルーチンを追加する方法を求めているならば、それはグロブにサブREFを割り当てるだけの問題です。これは
sub foo { ... }
は、あなたが、私は同じで検索すると、それは perlでインポートを使用する唯一の方法を表示
no strict qw(refs);
*{ $dst_pkg . '::' . $sub_name } = \&{ $src_pkg . '::' . $sub_name };
2
をしたい
BEGIN { *foo = sub { ... }; }
とほぼ同等であることを意味し私はそれを必要としません。私は インポートメソッドの内部作業を知りたいです。
内部を知りたい場合は、内部、つまりソースを確認してください。
は以下Exporter
モジュールからimport
サブルーチンが何をするかです。いくつかの「キーワード」がわからない場合は、ドキュメントと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. Python関数内での作業のみをインポートする
- 3. プロジェクト内でモジュールをグローバルにインポートする
- 4. Drupalモジュールの内部作業のためのメタファー
- 5. ジェンキンス「で、内部の作業ツリー」
- 6. インポートされたモジュールの作業ディレクトリを変更します
- 7. AMQPプロトコルの内部作業
- 8. TPL内部の作業
- 9. Fabric Composerの内部作業
- 10. Array.prototype.slice.call()の内部作業
- 11. ctsの内部作業:レジスタクエリ
- 12. MYSQL挿入内部作業
- 13. 約束の内部作業
- 14. Jenkinsの内部作業
- 15. Perlでhtdigestパスワードファイルを操作するモジュールはありますか?
- 16. perl DBI作業でmysql_read_default_groupを作成するには
- 17. モジュールの一部をインポートする
- 18. ループバックフックの作業フローが内部で発生する方法
- 19. perlモジュールの外部confファイル
- 20. インポートされたモジュール内での外部クラスメソッドの使用
- 21. ファイル 'BluetoothController.swift'は 'CoreBluetooth'モジュールの一部です。インポートを無視する
- 22. Pythonでモジュールの一部をインポートするには?
- 23. 同じプロジェクトフォルダ内のモジュールをインポートする
- 24. 角2:モジュール内のコンポーネントをエクスポートし、モジュール内でインポートして使用します。
- 25. Perlモジュール内で動的に作成された配列を空にします。
- 26. whileループの内部でgetlineの作業を行いますか? C++
- 27. 'file'コマンドのPerlモジュールですか?
- 28. インタビューQue Tableview reuseIdentifier内部作業
- 29. C標準ライブラリの内部作業
- 30. テンプレートがレンダリングされる前にUpdateView内部で作業を追加する
それはあなたが質問をしている理由を記述した場合に便利な答えを提供するために、私たちを助けるだろう。あなたはその情報で何をしますか? – Borodin