나는 다음과 같은 펄 모듈이 : 내가 입력하는 즉시 실행됩니다 인쇄가모듈에서 다른 동작을 구현
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;
"로그를 사용합니다;" 펄 스크립트에서. 언젠가는이 인쇄물이 여기에 있어야하고 언젠가는 없습니다 (이 상황은 필자가 쓴 다른 모듈에도 적용됩니다).
인스턴스별로이 스크립트에서 인쇄를 "활성화"또는 "비활성화"할 수 있습니까?
#!/usr/bin/perl -w
use strict;
use warnings;
use Log;
Log_Send("Hello world !");
내가 가져 오는 모든 모듈에서 "사용함/사용 안 함"디버그와 비슷합니다. 방법이 있습니까?
편집 : 내 고유 한 가져 오기 하위를 구현하려고했으나 @EXPORT 메카니즘을 잃었거나 복사 또는 붙여 넣기에서 소스 코드를 복사했지만 아무 것도 이해하지 못합니다. @EXPORT와 같은 mecanism으로 "가져 오기"를 구현하기위한 자습서가 있다면, 나는 그것에 만족할 것이다.
이상적으로 어떤 조건에서 'print'를 실행해야합니까? – ikegami
Idealy, "main.pl"에서 "내 모든 모듈"이 코드 부분을 실행 "(코드는 BEGIN, END, sub, 모듈의 모든 위치에있을 수 있음)에"무언가 "를 설정하려고합니다. 좀 더 정확히 말하면, 새로운 Perl 프로그램을 작성했을 때, 인쇄하고 싶지 않습니다. 그리고 제작 과정에서 Perl 프로그램을 보내면 인쇄하고 싶습니다. 이러한 동작을 구현할 수 있다면 "DEV_MODE"에 있거나 "PROD_MODE"에있을 경우 "DEBUG_ON"및 "DEBUG_OFF"(및 그 밖의 다른 Perl 스크립트). –