私は次のPerlモジュールがあります:私は入力するとすぐに実行されます印刷ありモジュールは異なる動作を実装する
package Log;
use strict;
use warnings;
# Packaging
use Exporter;
use vars qw($VERSION @ISA @EXPORT );
$VERSION = '1.0.0';
@ISA = qw(Exporter);
@EXPORT = qw(Log_Send);
my %log_g = ('PathDirFileLog' => '/some/path',
'File' => undef);
# Init
PrivateLog_OpenFileLog();
print("Do not execute this code unless I want from main.pl\n");
END {
PrivateLog_CloseFileLog();
}
# Public Functions
sub Log_Send
{
my ($message) = @_;
# Cleaning $message
$message =~ s/\n+$//g;
$message =~ s/\n/\*/g;
print($message);
print({$log_g{'File'}} $message) if ($log_g{'File'});
return (1);
}
# Private Functions
sub PrivateLog_OpenFileLog
{
my $path = $log_g{'PathDirFileLog'}.'/global.log';
if (!$log_g{'File'}) {
if (!open($log_g{'File'}, '>>', $path)) {
$log_g{'File'} = undef;
Log_Send("Failed to open '$path' in '>>' mode : $!");
return (0);
}
select((select($log_g{'File'}), $|=1)[0]);
}
return (1);
}
sub PrivateLog_CloseFileLog
{
if ($log_g{'File'}) {
close($log_g{'File'});
$log_g{'File'} = undef;
}
return (1);
}
1;
「ログを使用します。」任意のPerlスクリプトから。いつかこのプリントがここになければならない場合もあります(この状況は、私が書いた他のモジュールにも当てはまります)。
このスクリプトでは、インスタンスごとにプリントを「アクティブにする」か「非アクティブ化する」方法がありますか?
#!/usr/bin/perl -w
use strict;
use warnings;
use Log;
Log_Send("Hello world !");
私がインポートするすべてのモジュールで "有効/無効"デバッグと似ていますが、方法はありますか?
編集:私は自分自身のインポートサブを実装しようとしましたが、@EXPORTのマカニズムを失ったか、またはコピー元/エクスポート元のソースコードをコピーしても何も分かりません。 @EXPORTのようなmecanismで "import"を実装するためのチュートリアルがあれば、私はそれに満足しています。
理想的には、「印刷」を実行する条件はありますか? – ikegami
Idealyは、私は(どこかのモジュール内のコードがで、サブを、BEGIN ENDすることができる、)コードのこの部分を実行「「私のモジュールはすべてに言うだろう」」何か「main.pl」から設定したいです。具体的には、私は新しいPerlプログラムを書いたとき、私は印刷したくない、と私は生産にPerlプログラムを送信するとき、私が印刷したいです。このような振る舞いを実装できるのであれば、私は "DEV_MODE"にいるか、 "PROD_MODE"に入っていれば私のモジュールとは違う振る舞いをすることができますが、 "DEBUG_ON"と "DEBUG_OFF"(と私の未来のPerlスクリプト)。私自身のインポート機能を作成 –