使用import传递参数,但它会覆盖Perl中的导出
我试图通过导入将参数传递到包中,但它会覆盖我的导出。我在Debugger.pm中看到一些建议的$main:debugLevel,但它不起作用。如何解决这个问题 main.pl使用import传递参数,但它会覆盖Perl中的导出,perl,Perl,我试图通过导入将参数传递到包中,但它会覆盖我的导出。我在Debugger.pm中看到一些建议的$main:debugLevel,但它不起作用。如何解决这个问题 main.pl our $debugLevel = 5; our $dDebug=TRUE; our $dPkg=__PACKAGE__; our $dMsg=""; use MyPkg::Debugger qw( :all ); # ^-- how do I pass in the variables declared above
our $debugLevel = 5;
our $dDebug=TRUE;
our $dPkg=__PACKAGE__;
our $dMsg="";
use MyPkg::Debugger qw( :all );
# ^-- how do I pass in the variables declared above?
...
dPrintLog(4, 'testsub', 'msg', $mydata);
# ^-- this generate error, if i put in the "import" sub in the Debugger.pm
下午六时
use strict;
package MyPkg::Debugger;
our $VERSION = 1.00;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(dPrintLog );
our %EXPORT_TAGS = (
all => \@EXPORT_OK
);
use DateTime::Format::Strptime;
use POSIX qw(strftime);
use Data::Dumper;
our $debugLevel = 5;
our $dDebug=TRUE;
our $dPkg=__PACKAGE__;
our $dMsg="";
sub import {
my ($debugLevel , $dDebug, $dMsg, $data) = @_;
}
sub dPrintLog {
my ($level, $sub, $msg, $data) = @_;
if ($level == 5) {
print "L:" . $level . ";" . "Pkg:" . $sub . ";". "Msg: " . $msg . "\n";
print ' '.Dumper($data) unless (!defined $data);
}elsif ($level == 3){
}elsif ($level == 1){
}else{
}
}
仔细阅读客户的文档。它包含您需要的所有信息
App.pl
#!/usr/bin/perl
use warnings;
use strict;
use MyDbg (':all', 5); # Try removing the 5.
dPrintLog(undef, 'message');
MyDbg.pm
package MyDbg;
use warnings;
use strict;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(dPrintLog );
our %EXPORT_TAGS = ( all => \@EXPORT_OK );
use Exporter ();
my $debugLevel = 3;
sub import {
my ($class, $tag, $level) = @_;
$debugLevel = $level if $level;
$class->Exporter::export_to_level(1, $class, $tag);
}
sub dPrintLog {
my ($level, $msg) = @_;
$level ||= $debugLevel;
print { 5 => "L:$level $msg",
3 => "$msg",
1 => substr $msg, 0 ,1,
}->{$level}, "\n";
}
__PACKAGE__
有趣的是,如果删除@ISA行,它将不起作用。您必须声明导出子例程才能使其工作(根据我的实验,未找到任何文档):
或
甚至
sub export { goto &Exporter::export }
我运行它时出错。另一方面,未定义的子例程&main::dPrintLog,1。我注意到您确实打印了{…}->{$level},下面的“->{$level}是用于什么的?2.底部的“PACKAGE”是用于什么的?@hidden:Perl和Exporter的哪个版本?
->{level}
从匿名散列中获取值,如开关。\u包
返回真实值,如1;
返回。这是perl 5,版本14,subversion 2(v5.14.2)为MSWin32-x86-multi-thread构建。我不知道如何检查导出程序版本。@隐藏:use
在编译时运行,$dLevel可能仍然为空-您必须在BEGIN块中填充它。
*export = *Exporter::export{CODE};
sub export { goto &Exporter::export }