perl cgi中使用未初始化值报错

Use of uninitialized value error in perl cgi

当我尝试从终端执行我的 CGI 脚本时出现以下错误:

Use of uninitialized value $friends{"Bob=416-333-6363"} in print at ./new-cgi/data.cgi line 24

这是我的脚本:

    #!/usr/bin/perl -w

use strict;

my %friends;
my $name;
my $phone;

open FILE, "new-cgi/data.dat" or die ("No File\n");

while (<FILE>) {

        chomp;

        ($name, $phone) = split(" ", $_);

        $friends{$name}=$phone;

}

foreach (keys %friends) {

        print "Name:", $_, "\n";
        print "Phone:", $friends{$_}, "\n"; <--This is line 24
}

很难在没有看到 new-cgi/data.dat 文件的情况下看到,但我假设数据格式是一堆像 "Bob=416-333-6363" 这样的行,在这种情况下你想在 /=/ 上拆分而不是" ".

现在发生的事情是你在一个不存在的空格上拆分,所以 $name(最终的 key)得到整行,$phone 最终的 [=16] =], 得到一个 undef 值。因此,当您稍后迭代散列时,您会得到一个包含很多键(尽管键的数据为奇数)和 undef 值的散列。