как разделить строку, я имею в виду преобразовать 1234567890 в 12: 34: 56: 78: 90 - PullRequest
3 голосов
/ 03 февраля 2012

Мне нужно конвертировать некоторые номера Mac (00163e2fbab7) в строку Mac. (с ":")

Есть ли какой-нибудь хороший способ разделить номер Mac на группу? Я имею в виду в (00), (16), (3e), (2f), (ba), (b7)

Я знаю, в List::Gen есть функция where, но я не могу установить этот пакет на моем хосте. Итак, как я могу это сделать?

Большое спасибо!

Ответы [ 4 ]

8 голосов
/ 03 февраля 2012

Если вы знаете, что имеете дело с MAC-адресами, используйте библиотеку, разработанную специально для них, например Net::MAC

6 голосов
/ 03 февраля 2012

Просто разбейте строку на двухсимвольные куски и используйте join, чтобы собрать их вместе. Как это

my $mac = "00163e2fbab7";
print join ':', $mac =~ /../g;

OUTPUT

00:16:3e:2f:ba:b7
6 голосов
/ 03 февраля 2012
my $mac = "00163e2fbab7";
$mac =~ s/..(?!$)\K/:/g;
print "$mac\n";

Вывод:

00:16:3e:2f:ba:b7

Если у вас нет Perl 5.10, вы можете использовать:

$mac =~ s/(..)(?!$)/$1:/g;
1 голос
/ 08 февраля 2012

Это решение напечатает адрес в нескольких форматах .

my ($addr,$delim,$fmt) = (q(00163e2fbab7),q(:),q(2x));
printf qq(%*v0$fmt\n),$delim, pack(q(c*),(map { hex } 
(unpack(qq(A2) x int(length($addr)/2),$addr))));

ВЫХОД с параметрами форматирования

  • 00:16:3e:2f:ba:b7 шестнадцатеричный строчные, когда $fmt = q(2x).

  • 00:16:3E:2F:BA:B7 hex в верхнем регистре при $fmt = q(2X).

  • 000:022:062:047:186:183 целое число при $fmt = q(3i).

  • 000:026:076:057:272:267 восьмеричное при $fmt = q(3o).

  • 00000000:00010110:00111110:00101111:10111010:10110111 двоичный при $fmt = q(8b).

  • :XXII:LXII:XLVII:CLXXXVI:CLXXXIII римские цифры при just kidding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...