我正在尝试编写一个Perl脚本,要求用户输入MAC地址。我正在使用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()事件,而不必让脚本完全保释。
答案 0 :(得分:1)
请参阅https://mvp.kablamo.org/essentials/die-eval,以获取有关Perl中异常如何工作以及如何处理它们的一些信息。考虑使用Syntax::Keyword::Try作为熟悉的try / catch范例。
use Syntax::Keyword::Try;
my $newMac;
try {
my $tempMac = Net::MAC->new('mac' => $mac);
$newMac = $tempMac->convert('base' => 16,'bit_group' => 8,'delimeter' => ":");
$proceed = "yes";
} catch {
print "Looks like you entered an invalid MAC address. Error: $@ Please try again.\n";
}
您也可以先使用诸如Regexp::Common之类的东西来验证mac地址,然后再将其传递给Net :: MAC。
use Regexp::Common 'net';
my $newMac;
if ($mac =~ m/$RE{net}{MAC}/) {
my $tempMac = Net::MAC->new('mac' => $mac);
$newMac = $tempMac->convert('base' => 16,'bit_group' => 8,'delimeter' => ":");
$proceed = "yes";
} else {
print "Looks like you entered an invalid MAC address. Please try again.\n";
}