Если вы предоставите split
со строкой в качестве первого аргумента, она будет разбита на эту строку, как если бы она была регулярным выражением.
split ':', $str;
Это действительно DWIM из:
split /:/, $str;
Итак, ваш код:
split('/([0-9A-F]{2}[:-]){5}([0-9A-F]{2})/', $_);
Действительно означает
split(m[/([0-9A-F]{2}[:-]){5}([0-9A-F]{2})/], $_);
# or
split(/\/([0-9A-F]{2}[:-]){5}([0-9A-F]{2})\//, $_);
Также вы хотите, чтобы split
сохранил значение, которому он соответствует, поэтому вы хотите, чтобы все совпадение было в ()
.
$_ = "Sample sentence with 00-B0-D0-86-BB-F7 MAC address in the middle";
my ($a, $mac, $b) = split(/((?:[0-9A-F]{2}[:-]){5}[0-9A-F]{2})/, $_);
print $mac, "\n";
Поскольку вы, похоже, используете только $mac
, вам не нужно использовать split
.
my ($mac) = /((?:[0-9A-F]{2}[:-]){5}[0-9A-F]{2})/;
# or
my @macs = /((?:[0-9A-F]{2}[:-]){5}[0-9A-F]{2})/g;