1

@INC パスのモジュールを解析するとき、Perl はサブルーチンの名前の競合をどのように解決しますか?

私は Perl モジュールを書いていますが、サブルーチン名が既に存在するものと競合することを望んでいません。

4

2 に答える 2

2

これはここでいくらかの光を当てるはずです。

テストスクリプト

#!/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
于 2013-03-06T22:53:01.710 に答える
0

package を使用してモジュール内に個別の名前空間を構築すると、この種の問題を回避できます。package ステートメントは、コンパイル ユニットが指定された名前空間にあることを宣言します。このリンクが役立つ場合があります。

于 2013-03-06T22:50:19.740 に答える