【发布时间】:2015-07-29 21:46:27
【问题描述】:
虽然我在开始时已正确初始化所有变量,但 Perl 正在报告警告。 这是我生成随机单播 mac-address 的代码:
our $OCTATE_MAX = 255; #Max value stored in 8-bit field
our $octate1 = 0;
our $octate2 = 0;
our $octate3 = 0;
our $umac_serial = "";
sub get_umac_serial
{
# Can not use sprintf as there is an issue with Igloo-JT
#return "00:" . sprintf ("\00", int(rand(100))) . ":" . sprintf("\00",int(rand(100)));
my $first = int(rand(99));
my $second = int(rand(99));
return "00:" . "$first" . ":" . "$second";
}
sub get_umac_address
{
$octate1 = $octate1 + 1;
$octate1 = int(rand(99));
$octate2 = int(rand(99));
$octate3 = int(rand(99));
if ($octate1 >= $OCTATE_MAX)
{
$octate2 = $octate2 + 1;
$octate1 = 0;
}
elsif ($octate2 >= $OCTATE_MAX)
{
$octate1 = 0;
$octate2 = 0;
$octate3 = $octate3 + 1;
}
elsif ($octate3 >= $OCTATE_MAX)
{
$umac_serial = get_umac_serial();
print("Unicast mac-serial # $umac_serial\n");
$octate1 = 0;
$octate2 = 0;
$octate3 = 0;
}
$umac_serial = get_umac_serial();
#my $mac_addr = $umac_serial . ":" . sprintf("\00", $octate3) . ":" . sprintf("\00", $octate2) . ":" . sprintf("\00",$octate1);
my $mac_addr = $umac_serial . ":" . "$octate3" . ":" . "$octate2" . ":" . "$octate1";
print("MAC ADDR - $mac_addr\n");
return $mac_addr;
}
return $result;
#exit;
} ####### End of mac_addr
虽然值已正确初始化,但 perl 会引发以下错误:
Jul 29 01:14:25 [WARN ] perl: Use of uninitialized value in addition (+) at /var/lib/igloo_jt/explorer/2015/7/1251/mac_addr.pm line 77. Use of uninitialized value in addition (+) at /var/lib/igloo_jt/explorer/2015/7/1251/mac_addr.pm line 77.
Jul 29 01:14:25 [WARN ] perl: Use of uninitialized value in numeric ge (>=) at /var/lib/igloo_jt/explorer/2015/7/1251/mac_addr.pm line 81. Use of uninitialized value in numeric ge (>=) at /var/lib/igloo_jt/explorer/2015/7/1251/mac_addr.pm line 81. MAC ADDR - 00:74:53:58:33:0
Jul 29 01:14:25 [WARN ] perl: Use of uninitialized value in numeric ge (>=) at /var/lib/igloo_jt/explorer/2015/7/1251/mac_addr.pm line 81. Use of uninitialized value in numeric ge (>=) at /var/lib/igloo_jt/explorer/2015/7/1251/mac_addr.pm line 81.
MAC ADDR - 00:51:68:64:69:0
这段代码有什么问题?
【问题讨论】:
-
显示你的真实代码。您粘贴的内容没有 77 行。
-
您可能有兴趣知道
$octate1++不会触发$octate1 = $octate1 + 1的未定义警告,当变量为undef时。 -
另外,为什么在覆盖下一行的值时将其分配给
$octate1?"00:" . "$first" . ":" . "$second"很痛苦。应该写成"00:$first:$second",或者更好的是join ":", "00", $first, $second -
@AnilKumarKK “怎么可能是 undef ?” - 要回答这个问题,您需要完整显示您的真实代码。
-
我发现尾部附加的
return行的存在相当可疑。
标签: perl shell initialization perl-module