Страница 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