Perl+Разделение строки

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ed_butcher
мл. сержант
Сообщения: 70
Зарегистрирован: 2009-04-17 16:00:53
Откуда: Харьков-Киев

Perl+Разделение строки

Непрочитанное сообщение ed_butcher » 2012-07-06 12:37:50

Сорри за детский вопрос, но чёто не получается:
Есть список mac-адресов вида
1a2b3c4d5e6g
5k7ld93u8s6b
0h8dd35lj68g
...

подскажите плиз как грамотно разделить в perl каждые 2 символа, чтоб было типа 1a-2b-3c-4d-5e-6g и т.д.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

mr.bbon
проходил мимо
Сообщения: 1
Зарегистрирован: 2012-07-10 10:40:30
Контактная информация:

Re: Perl+Разделение строки

Непрочитанное сообщение mr.bbon » 2012-07-10 11:16:44

Сорри за детский вопрос, но чёто не получается:
Есть список 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;

Аватара пользователя
ed_butcher
мл. сержант
Сообщения: 70
Зарегистрирован: 2009-04-17 16:00:53
Откуда: Харьков-Киев

Re: Perl+Разделение строки

Непрочитанное сообщение ed_butcher » 2012-07-10 13:46:55

Спасибо огромное! Список маков набрасал с потолка, просто чтоб показать формат записи(буквы, цифры). Думал что есть какая-то функция, которая режет по критерию(н-р, через каждые 2 символа), но получается что только регулярное выражение, что не совсем удобно если строка длинная.

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Perl+Разделение строки

Непрочитанное сообщение rayder » 2012-07-10 15:39:47

Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.

rayder
лейтенант
Сообщения: 661
Зарегистрирован: 2008-12-18 16:29:43
Откуда: Ukraine/Kiev
Контактная информация:

Re: Perl+Разделение строки

Непрочитанное сообщение rayder » 2012-07-10 15:46:36

для особо ленивых

Код: Выделить всё

#!/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
Человеку свойственно ошибаться, но для нечеловеческих ляпов нужен компьютер.