Perl论证"用户"数组元素中不是数字

时间:2015-03-11 10:21:54

标签: arrays perl arguments warnings numeric

我总是得到消息,我在数组中的参数不是nummeric。 它在这个小代码中发生了5次:

    my $mcnamequery = "SELECT mcID FROM tblMCName WHERE mcName = '".$mcname."'";
$mcid = dbSelect($mcnamequery);
print $mcid->{mcID} . "\n";

my $userfsquery = "SELECT userFS FROM tblMcSubs WHERE mcFS = '".$mcid->{mcID}."'";  
my $execute = $dbh->prepare($userfsquery);
$execute->execute();

while (@usersfs = $execute->fetchrow_array()) {
    print $usersfs['userFS'] . "\n";

    my $mailquery = "SELECT useremail FROM tblUser WHERE userID = '".$usersfs['userFS']."'";
    $execute2 = $dbh->prepare($mailquery);
    $execute2->execute();
    while (@mails = $execute2->fetchrow_array()) {
        $counter++;
        print $mails['useremail']. "\n";
        if($counter == 1){
                $addresses = $mails['useremail'];
        }else{
            $addresses = $addresses. " " . $mails['useremail'];
        }   
    }   
}

第一次发生,就在这一行:print $usersfs['userFS'] . "\n"; 之后,我会在我想要使用$usersfs['userFS']$mails['useremail']

的地方收到此消息

错误消息: 参数“userFS”在/tem/obm/morningcheck/jantool.pl第520行的数组元素中不是数字。 参数“userFS”在/tem/obm/morningcheck/jantool.pl第522行的数组元素中不是数字。 参数“useremail”在/tem/obm/morningcheck/jantool.pl第527行的数组元素中不是数字。 参数“useremail”在/tem/obm/morningcheck/jantool.pl第529行的数组元素中不是数字。 参数“useremail”在/tem/obm/morningcheck/jantool.pl第531行的数组元素中不是数字。

希望你能帮助我,谢谢!

2 个答案:

答案 0 :(得分:6)

print $mails['useremail']. "\n";

这是你的问题。 []表示一个名为@mails的数组的数组索引。所以字符串arg 永远不会有效。

也许你的意思是:

print $mails{'useremail'}."\n";

这是名为%mails的哈希的关键参数。

但是,当您获取一个名为@mails的数组时......您要么弄清楚索引,要么进行一些键值关联。

鉴于您的查询都会获取单个列,您只需访问:

$mails[0] 

$usersfs[0]

答案 1 :(得分:2)

在Perl中,数组使用数字索引。 'userFS'不是数字,因此是错误。

如果要使用哈希表(也称为关联数组),则必须在键周围使用大括号:

my %usersfs;
$usersfs{userFS} = "whatever";