@INC パスのモジュールを解析するとき、Perl はサブルーチンの名前の競合をどのように解決しますか?
私は Perl モジュールを書いていますが、サブルーチン名が既に存在するものと競合することを望んでいません。
@INC パスのモジュールを解析するとき、Perl はサブルーチンの名前の競合をどのように解決しますか?
私は Perl モジュールを書いていますが、サブルーチン名が既に存在するものと競合することを望んでいません。
これはここでいくらかの光を当てるはずです。
テストスクリプト
#!/usr/bin/perl
use warnings;
use strict;
# import 'print_stuff' from TestPackage
# so you can call this sub without package name
use TestPackage qw(print_stuff);
my $string = "whatever";
TestPackage::print_stuff($string);
print_stuff($string);
sub print_stuff {
my $str = shift;
print "test.pl: $str\n";
}
テストパッケージ
package TestPackage;
# Export subs, which will enable you to call these
# subs without package name(TestPackage)
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(print_stuff);
sub print_stuff {
my $str = shift;
print "TestPackage: $str\n";
}
1;
出力:
$ test.pl
TestPackage: whatever
test.pl: whatever
package を使用してモジュール内に個別の名前空間を構築すると、この種の問題を回避できます。package ステートメントは、コンパイル ユニットが指定された名前空間にあることを宣言します。このリンクが役立つ場合があります。