我的基本问题是这个。如果我没有将参数传递给我的包 -DbIoFunc
的例程OpenIcsDB()
,为什么 pacakge 名称在@_
?
当我没有将参数传递给以下函数时,我期望 @_ 为空,但参数包含包名称。我试过用类->
和::
语法调用,没有区别。
我应该测试什么来确定除了以下参数之外是否没有传递任何参数?
my ($Temp, $DBPathLocal) = @_;
if(!defined $DBPathLocal)
{
$DBPathLocal = DBDEV;
}
我想知道两件事。为什么包名是其中的一部分,@_
并且是我所做的最好的方法来摆脱包名?
这是电话:
my ($DBHand);
$DBHand = DbIoFunc->OpenIcsDb();
这是功能:
sub OpenIcsDb
#
# DB Path Constant DBPROD or DBDEV.
#
{
# Path passed in, either DBPROD or DBDEV
my ($DBPathLocal);
my ($DBSuffix);
my ($DBHand); # ICS database handle
$DBPathLocal = shift;
#
# Make sure the database path exists.
#
if (length($DBPathLocal) <= 0)
{
if (!$Debugging)
{
$DBPathLocal= DBPROD;
}
else
{
$DBPathLocal = DBDEV;
}
}
else
{
$DBPathLocal = DBDEV;
}
my $DBSuffix = DBSUFFIX;
$! = 2;
die("Can't find database directory ".$DBPathLocal.".".$DBSuffix)
unless ((-e $DBPathLocal.".".$DBSuffix) && (-d $DBPathLocal.".".$DBSuffix));
#
# See if we can connect to the ICS database. We can't proceed without it.
#
$DBHand = DBI->connect("dbi:Informix:".$DBPathLocal, "", "")
or die("Can't connect to the ICS database ".$DBPathLocal);
return $DBHand;
}