10

外部モジュールファイルでサブルーチンへの参照を作成する方法を理解するのに問題があります。今、私はこれをやっています:

外部ファイル

package settingsGeneral;    
sub printScreen {
    print $_[0];
}

主要

use settingsGeneral;    
my $printScreen = settingsGeneral::printScreen;
&$printScreen("test");

ただし、これによりエラーが発生します。「strictrefs」を使用している間は、サブルーチンrefとして文字列(「1」)を使用できません。

4

1 に答える 1

28

perlmodlibに記載されているように、モジュール名は大文字で始める必要があります。

integerPerlは、やのような「プラグマ」モジュールの小文字のモジュール名を非公式に予約しますstrict。他のモジュールは通常、大文字で始まり、アンダースコアのない混合大文字を使用します(短くてポータブルである必要があります)。

別のパッケージで定義されたサブを呼び出す1つの方法は、呼び出すときにそのサブの名前を完全に修飾することです。

SettingsGeneral::printScreen "important message\n";

への参照だけが必要な場合はprintScreen、バックスラッシュ演算子を使用して取得します

my $subref = \&SettingsGeneral::printScreen;

のいずれかでそれを呼び出します

&$subref("one\n");
&{$subref}("two\n");
$subref->("three\n");

現在のパッケージにエイリアスを作成できます。

*printScreen = \&SettingsGeneral::printScreen;
printScreen("another urgent flash\n");

次のように記述して、括弧をスキップします(現在のパッケージのサブはコンパイル時に認識されていなかったために必要です)。

use subs 'printScreen';
*printScreen = \&SettingsGeneral::printScreen;
printScreen "the sky is falling!\n";

Exporterモジュールは、この管理作業を実行できます。

SettingsGeneral.pm:

package SettingsGeneral;

use Exporter 'import';

our @EXPORT = qw/ printScreen /;

sub printScreen {
  print $_[0];
}

1;

主要:

#! /usr/bin/perl

use warnings;
use strict;

use SettingsGeneral;

printScreen "foo!\n";
于 2010-04-06T13:53:58.287 に答える