在scriptA.pl,有use DBI
在scriptB.pl,有require "scriptA.pl"
但我们仍然无法使用DBI包 scriptB.pl
任何方法来处理这除了重复 use DBI的scriptB.pl?
范围性质use是一个记录的功能:
use Module从命名模块将一些语义导入当前包,通常通过将某些子例程或变量名称别名到包中.
你可以通过回到石器时代做你想做的事,如下例所示,但请不要.
使用MyModule作为一个独立的为DBI:
package MyModule;
use Exporter 'import';
our @EXPORT = qw/ foo /;
sub foo { print "$_[0]!\n" }
1;
Run Code Online (Sandbox Code Playgroud)
然后打电话MyModule::foo给scriptA.pl
foo "from scriptA";
Run Code Online (Sandbox Code Playgroud)
从 scriptB.pl
foo "from scriptB";
Run Code Online (Sandbox Code Playgroud)
全部从一个主要计划开始
#! /usr/bin/perl
use warnings;
use strict;
use MyModule;
do "scriptA.pl" or die;
do "scriptB.pl" or die;
print "done.\n";
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
from scriptA! from scriptB! done.
您还可以通过讨厌的eval游戏禁用范围安全功能,但请不要这样做.
如果您的设计需要改进,也许scriptA和scriptB在同一个属于包,这将是你的时间远远更好的投资.否则,咬紧牙关并花费九次击键.
请注意,在运行时通过do或是require严格过时的方法执行Perl库.该perlmod的文档描述了现代的方法.