2

これが可能かどうかは完全にはわかりませんが、パッケージ名を省略して、別のパッケージで宣言されている、呼び出しているサブルーチンの名前を単純に短縮したいと思います。

たとえば、次のモジュールが定義されています。

package Package1;

use strict;
use warnings;

BEGIN 
{
  require Exporter;
  our @ISA = qw( Exporter );
  our @EXPORT_OK = qw( subroutine1 );
}

sub subroutine1
{
  print "Hello!$/";
}

return 1;

そして、ドライバーアプリケーションを定義しました:

use strict;
use warnings;

use Package1;

&Package1::subroutine1;

への呼び出しを短縮できるように見える唯一の方法はsubroutine1、次のようなエイリアスを作成することです。

*s1 = \&Package1::subroutine1;
&s1;

確かに私はばかで、ここで何かが欠けています..これを達成するためのよりクリーンな方法はありますか?

4

2 に答える 2

5

変化する

use Package1;

use Package1 qw( subroutine1 );

または変更

our @EXPORT_OK = qw( subroutine1 );

our @EXPORT = qw( subroutine1 );

最初の変更をお勧めします。

于 2012-09-28T16:45:40.433 に答える
1

あなたはすでに を使用していますExporter。これがこれを実現する方法です。ドライバー アプリケーション コードを次のように変更するだけです。

use Package1 'subroutine1';

importによって提供されるメソッドExporterに、シンボルを呼び出し元のパッケージにエクスポートするように指示するため。

于 2012-09-28T16:45:30.230 に答える