gpt4 book ai didi

perl - 使用 Perl Net::MAC 模块处理无效 MAC 条目的错误

转载 作者:行者123 更新时间:2023-12-03 08:22:40 26 4
gpt4 key购买 nike

我正在尝试编写一个要求用户输入 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() 事件而不让脚本完全保释我。

最佳答案

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

关于perl - 使用 Perl Net::MAC 模块处理无效 MAC 条目的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52728109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com