3

パラメータをテストする方法について少し混乱しています。以下に投稿されたソース コードから 2 つの例を示します。まずはこれ

if(!defined($DBHdl) || !defined($acct_no));

未定義のパラメータをテストする方法は?

第二に、ハッシュリファレンスに割り当てた後

$ptMtrRecRef = $ptSelHdl->fetchrow_hashref;

$ptMtrRecRef使用するように定義されていることをテストする最良の方法です

if(!$ptMtrRecRef)

また

if(!defined($ptMtrRecRef))?

###############################################################################
#  Returns count of meters per account number.

# $PkNam  -- package name discarded
# $DBHdl -- ICS database handle
# $acct_no -- water account number

sub mgbl_get_meter_count
{
    my ($PkNam, $DBHdl, $acct_no) = @_;

    die("mgbl_get_meter_count passed undef handles.\n")
        if(!defined($DBHdl) || !defined($acct_no));

    my $ptSelHdl;
    my $ptMtrRecRef;

    my $sql_statement = 
     "select count(*) from meter m where m.acct_no = ".$acct_no.";";

    $ptSelHdl = $DBHdl->prepare($sql_statement);

    die("Cannot prepare select count(*) from meter m\n")
      if(!$ptSelHdl || !$ptSelHdl->execute);

    $ptMtrRecRef = $ptSelHdl->fetchrow_hashref;

    return $ptMtrRecRef;
}
4

3 に答える 3

9

$sth->fetchrow_hashrefを返すundefか、ハッシュへの参照を返します。そのような

if (defined($row))

if ($row)

ここでは同等です。(undefは false であり、参照は常に true です。) 私はより単純な代替案を選びます。

についても同じ考えです$dbh->prepare

于 2013-10-15T17:55:18.320 に答える
5

あなたが投稿したコードの場合、私も池上が言ったように、短い形式を使用します。

ただし、それが適切でない場合もあります。たとえば、変数が真/偽テストで単に使用された場合に偽として扱われる正当な値を持つ可能性がある場合です。例えば:

my $value = 0;
print "defined\n" if defined $value;  # prints 'defined'
print "true\n" if $value;  # does not print anything
于 2013-10-15T18:29:53.973 に答える