如何在 Perl 中转换 MAC 地址格式?

1 regex perl mac-address

我必须制作一个 Perl 脚本,以 HHHH.HHHH.HHHH 格式获取 MAC 地址,其中“H”是十六进制数字,并给出 HH:HH:HH:HH:HH:HH 的输出。我怎样才能在 Perl 中进行这种转换?

这是一个输入文本示例:

System Information
Local port          :xgei-1/6/1
Group MAC address   :Nearest Bridge
Neighbor index      :1
Chassis type        :MAC address
Chassis ID          :4cf5.5b8b.f860
Port ID type        :Interface name
Port ID             :XGigabitEthernet0/0/1
Time to live        :109
Port description    :ZTE-2-C650-172.24.102.77
System name         :main-link-lab-cdi-sw-01
Run Code Online (Sandbox Code Playgroud)

这是我处理 MAC 地址数据的脚本片段:

if ($linha =~m/^Chassis ID/){
            my($chassisID) = $linha=~ /:(.*)/g;
            $lldpInfo{$localInt}{"chassisID"} = $chassisID;
            print $chassisID."\n";  
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我必须处理变量$chassisID

Sha*_*awn 6

您可以使用CPAN 中的NetAddr::MAC模块以多种不同的方式解析和格式化 MAC 地址:

#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
use NetAddr::MAC;

my $macaddr = '4cf5.5b8b.f860';
my $mac = NetAddr::MAC->new($macaddr);
say $mac->as_ieee; # 4c:f5:5b:8b:f8:60
Run Code Online (Sandbox Code Playgroud)

  • “_应该避免模块..._”——理解,但是随着需求的发展,这可能会导致额外的负担和代码尴尬。或者可能几乎不可能——例如,如果您需要复杂的日期时间处理怎么办?您是否考虑过将应用程序所需的一切(模块等)“打包”?Perl 中有相当全面的工具。只是一个想法 (2认同)