这可以在一行中完成吗?

时间:2011-11-03 15:35:53

标签: perl

我正在提取MAC地址

my @tmp = split / /, "domain (123.123.123.123) at 00:11:22:33:44:55 [ether] on eth0";
my $vip = $tmp[3];

但是可以在不使用临时变量的情况下完成吗?

4 个答案:

答案 0 :(得分:16)

是的,它可以:

my $vip = (split / /, "domain (123.123.123.123) at 00:11:22:33:44:55 [ether] on eth0")[3];

答案 1 :(得分:13)

Yes it can.

my (undef, undef, undef, $vip) = split / /, "...";

答案 2 :(得分:6)

我会推荐这种方法,它在大海捞针的字边界处寻找“正确”的MAC地址。如果MAC地址在字符串中移动,它仍然有效,如果在此语句后未定义$vip,则找不到MAC地址。如果我能澄清任何事情,请告诉我。

my ($vip) = "..." =~ /\b((?:[0-9A-Fa-f]{1,2}[:-]){5}[0-9A-Fa-f]{1,2})\b/;

答案 3 :(得分:4)

您可以使用grep。这将获取匹配正则表达式的第一个字段。请注意,除非您特别需要多个空格才能生成空字段,否则应使用' ',而不是/ /

my ($vip) = grep /^[0-9:]+$/, split ' ', "...";