如何在Perl中获取分割的最后一项?

时间:2014-01-27 19:52:17

标签: perl split

$k="1.3.6.1.4.1.1588.2.1.1.1.6.2.1.37.32";
@a=  split('\.',$k);
print @a[-1];                           # WORKS!
print  (split '\.',$k)[-1];             # Fails: not proper syntax.`

我想打印拆分的最后一个元素而不必使用中间变量。有没有办法做到这一点?我正在使用Perl 5.14。

3 个答案:

答案 0 :(得分:17)

Perl将开括号(归因于print函数。语法错误来自于print() [-1]无法跟随print。即使()+之间有空格。如果您不想为print添加parens,则需要在括号前添加print +(split'\.', $k)[-1]; 符号以强制列出上下文。

my $foo = (split '\.', $k)[-1];
print $foo;

如果你没有使用语法作为预期有parens的东西的参数,那么它也会以你尝试的方式工作。

{{1}}

答案 1 :(得分:8)

您可以使用正则表达式捕获,而不是创建完整列表并slicing来获取最后一个元素:

use strict;
use warnings;

my $k = "1.3.6.1.4.1.1588.2.1.1.1.6.2.1.37.32";
my ($last) = $k =~ /(\d+)$/;
print $last;

输出:

32

答案 2 :(得分:0)

rindex()拆分最后一个位置,而index()从第一个位置拆分

print substr( $k, rindex($k, '.')+1 );