【发布时间】:2019-03-14 15:36:04
【问题描述】:
我正在尝试编写一个要求用户输入 MAC 地址的 Perl 脚本。我正在使用 Net::MAC 模块将用户输入的任何格式的 MAC 地址转换为标准格式,供我稍后在脚本中使用。我已经完成了大部分工作,但我似乎无法弄清楚如何处理他们输入无效 MAC 的情况。不可能是 MAC 地址的东西。例如包含非 A-F 字母的条目。
我在想像下面这样的东西应该可以工作,但是当它死掉时,它会完全杀死整个脚本,而不是重新要求用户再次输入 MAC。
use Net::MAC;
my $proceed = "no";
while ($proceed eq "no"){
print "Enter the MAC address: ";
my $mac;
$mac = <>;
chomp($mac);
my $tempMac = Net::MAC->new('mac' => $mac, 'die' => 0);
if ($tempMac->die() eq "0"){
print "Looks like you entered an invalid MAC address. Please try again.\n";
} else {
my $newMac = $tempMac->convert('base' => 16,'bit_group' => 8,'delimeter' => ":");
$proceed = "yes";
}
}
应该改用 Try, Catch 语句之类的东西吗?我认为换句话说,我需要知道如何适当地处理 die() 事件而不让脚本完全保释我。
【问题讨论】:
-
根据其文档,Net::Mac 对象没有
die方法......地址无效究竟会发生什么?任何错误消息等? -
如果我输入虚假内容,我会得到类似以下内容; 39568jkl:“发现 MAC 地址元数据失败,MAC 地址中的无效字符“00:00:39:56:8j:kl”在 ./RTTest.pl 第 124 行”我希望能够对此进行测试并循环返回并要求用户重新输入 MAC 地址。
-
我需要坐下来实际玩代码,但是这个模块中的错误处理真的很奇怪。当 die 为 0 时,它只是存储一条错误消息并继续尝试做它的事情,从而导致更多错误。如果 die 为 0 且 verbose 为 1,它将使用 carp 打印错误,但如果 die 为 0,它不应该发出嘶嘶声。
-
看起来您应该使用
$tempMac->get_error()并查看它是否返回undef以检查是否有错误。我想知道tempMac->die()是否正在调用内置的die...
标签: perl error-handling scripting