私の基本的な質問はこれです。DbIoFunc
パッケージのルーチンにパラメータを渡さない場合、OpenIcsDB()
なぜパッケージ名が含まれているの@_
ですか?
次の関数にパラメーターを渡さない場合は @_ が null になると予想していますが、代わりにパラメーターにパッケージ名が含まれています。クラス->
と::
構文で呼び出してみましたが、違いはありません。
次以外のパラメーターが渡されていないかどうかを判断するには、何をテストすればよいですか?
my ($Temp, $DBPathLocal) = @_;
if(!defined $DBPathLocal)
{
$DBPathLocal = DBDEV;
}
私は2つのことを疑問に思っています。なぜパッケージ名はの一部で@_
あり、パッケージ名を取り除くための最良の方法は何ですか?
呼び出しは次のとおりです。
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;
}