Страница 1 из 1
Perl+Разделение строки
Добавлено: 2012-07-06 12:37:50
ed_butcher
Сорри за детский вопрос, но чёто не получается:
Есть список mac-адресов вида
1a2b3c4d5e6g
5k7ld93u8s6b
0h8dd35lj68g
...
подскажите плиз как грамотно разделить в perl каждые 2 символа, чтоб было типа 1a-2b-3c-4d-5e-6g и т.д.
Re: Perl+Разделение строки
Добавлено: 2012-07-10 11:16:44
mr.bbon
Сорри за детский вопрос, но чёто не получается:
Есть список mac-адресов вида
1a2b3c4d5e6g
5k7ld93u8s6b
0h8dd35lj68g
Насколько я помню математику, в 16-ричном мак-адресе не могут присутствовать символы g, s, u...
А для шестнадцатиричных строк фиксированной длины, преобразование выглядит примерно так:
Код: Выделить всё
#! /usr/bin/perl
use strict;
use warnings;
my $mac = '1a2b3c4d5e6f';
if (length $mac == 11) {
$mac = '0' . $mac
}
elsif (length $mac != 12) {
die 'Bad mac-address';
}
$mac =~ m/^([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
my @mac = ($1, $2, $3, $4, $5, $6);
print(join '-', @mac);
print "\n";
exit;
Re: Perl+Разделение строки
Добавлено: 2012-07-10 13:46:55
ed_butcher
Спасибо огромное! Список маков набрасал с потолка, просто чтоб показать формат записи(буквы, цифры). Думал что есть какая-то функция, которая режет по критерию(н-р, через каждые 2 символа), но получается что только регулярное выражение, что не совсем удобно если строка длинная.
Re: Perl+Разделение строки
Добавлено: 2012-07-10 15:39:47
rayder
Re: Perl+Разделение строки
Добавлено: 2012-07-10 15:46:36
rayder
для особо ленивых
Код: Выделить всё
#!/usr/bin/perl
use Net::MAC;
my $mac = Net::MAC->new('mac' => '082000ABCDEF');
my $cmac = $mac->convert('bit_group' => 8, 'delimiter' => '.');
print $cmac->get_mac();
выдаст: 08.20.00.ab.cd.ef