我有包含全局变量的包:
), KEY
在其他Perl文件中我可以将此包用作:
(
它会起作用。
我想改变一下包的用法,如:
) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
逻辑上,用法应该是:
app.config(['$httpProvider',
function ($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}
此方法适用于方法,例如:
package Constants;
use strict;
use warnings;
use Exporter qw( import );
use Exporter ();
use vars qw(@ISA @EXPORT_OK);
@ISA = qw(Exporter);
@EXPORT_OK = qw(@A %B, $C, foo);
our %B = (id => 0, desc => "AF :: BUILD SUCCEEDED");
our @A = (
"Undefined symbols for architecture",
"BUILD FAILED"
);
our $C = "blablabla";
sub foo(){}
1;
那么我如何使用use FindBin qw($RealBin);
use lib $RealBin;
use Constants qw(@A %B, $C, foo);
而无需将其链接到use Constants;
?
答案 0 :(得分:4)
The sigil($
,@
或%
)需要先行。
@Constants::A;
%Constants::B;
$Constants::C;
perlsyn的第一部分对此进行了解释。
您可能已经在Data::Dumper之类的其他软件包中看到了这一点,它允许您to configure it with its package variables。
use Data::Dumper;
$Data::Dumper::Indent = 0;
在你的包中你可以使用$C
,它只是一个空的命名空间,所以假设当前的那个。
$ foo # namespace is nothing
$Constants::foo # namespace is Constants::
它适用于函数(你显示的不是一个方法,因为没有涉及OOP,方法调用将是Constants->foo
),因为那些通常没有sigil。您可以&Constants::foo()
使用&
关闭任何原型,但除非您知道自己在做什么,否则请不要这样做。
还有一个用于typeglobs的sigil *
。同样的规则适用于它。
你问题的最后一句话令人困惑。
[...]没有调用链接到qw(@A%B $ C)?
我认为你的意思是导入它们。这就是当您将名称放入@EXPORT_OK
时,Exporter允许您执行的操作。传递给use Constants
的名称列表告诉Exporter它应该在命名空间中安装哪些符号。
然后将类似指针的内容放入您的命名空间,表明您的$C
与$Constants::C
引用的内容相同。
当您使用our
或use vars
声明包变量时(让我们认为它们与此答案的范围相同),它们始终可以从外部访问。您只需要使用完全限定的包名称。
将它们导入您自己的命名空间只是一种方便。你也可以自己做。
use Constants (); # the empty list explicitly imports nothing
*C = \$Constants::C;
你刚刚自己导入了。但你可能不想这样做。
答案 1 :(得分:-2)
package Constants;
use strict;
use warnings;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(@A %B $C foo); # always exports these to main::
our %B = (id => 0, desc => "AF :: BUILD SUCCEEDED");
our @A = (
"Undefined symbols for architecture",
"BUILD FAILED"
);
our $C = "blablabla";
sub foo(){}
1;