使用Perl Net :: MAC模块

时间:2018-10-09 19:29:59

标签: perl error-handling scripting

我正在尝试编写一个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()事件,而不必让脚本完全保释。

1 个答案:

答案 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";
}