LINUX.ORG.RU

[Perl] Кошерно ли использовать внешние утилиты?


0

1

Второй день как знаком с Perl. Решаю задачу, в ходе которой понадобилось вытянуть список MAC-адресов из ARP-таблицы. Пока что нашёл такое решение:

$somedata = `arp | grep -E -o '[0-9,aAbBcCdDeEfF]{1,2}(\:[0-9,aAbBcCdDeEfF;]{1,3}){5}'`;

В результате из

localhost arp # arp
Address                            HWtype  HWaddress           Flags Mask            Iface
192.168.1.24                    ether   00:21:91:20:01:0a   C                     eth0
somebody.office.xxx          ether   00:02:2a:e1:6f:de   C                     eth0
Получаю
00:21:91:20:01:0a
00:02:2a:e1:6f:de

Но меня смущает тот факт, что Perl позиционируется в том числе как мощный инструмент для обработки текстовой информации, и поэтому использование внешних утилит не совсем уместное. Если я правильно думаю, то как так же элегантно решить задачу по парсинге результатов arp только средствами Perl?

Ответ на: комментарий от sdio

В моём случае еще будут и манипуляции с таблицей, в том числе на FreeBSD, поэтому лучше не отказываться от утилиты arp.

Chaser_Andrey ★★★★★
() автор топика
Ответ на: комментарий от sdio

Вместо FD — $fd (давно в перл не тыкал)

sdio ★★★★★
()

a)

/(?<=\s)[\da-f]{2}(?::[\da-f]{2}){5}(?=\s)/i && say $& for `arp -n`;

b)

$/ = undef;
say for `arp -n` =~ /(?<=\s)[\da-f]{2}(?::[\da-f]{2}){5}(?=\s)/ig;
...

arsi ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

В моём случае еще будут и манипуляции с таблицей, в том числе на FreeBSD, поэтому лучше не отказываться от утилиты arp.

Синтаксис команды ARP у них все равно отличается. В таком случае лучше написать два варианта package для работы с ARP - один для Linux, второй для FreeBSD, но с одинаковым интерфейсом. Вызывать его из основного кода.

Deleted
()

К.О. ITT: Кошерно ли использовать внешние утилиты?

Использовать следует то, что удобно пользователям поделия.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.