如何在Perl中获取拆分的最后一项?
我希望打印拆分的最后一个元素,而不必使用中间变量。有办法做到这一点吗?我使用的是Perl 5.14。Perl将开括号如何在Perl中获取拆分的最后一项?,perl,split,Perl,Split,我希望打印拆分的最后一个元素,而不必使用中间变量。有办法做到这一点吗?我使用的是Perl 5.14。Perl将开括号(归因于print函数。语法错误是因为print()后面不能跟[-1]。即使print和之间有空格()。如果不想在打印中添加参数,则需要在括号前面加上+符号以强制列表上下文 $k="1.3.6.1.4.1.1588.2.1.1.1.6.2.1.37.32"; @a= split('\.',$k); print @a[-1]; #
(
归因于print函数。语法错误是因为print()
后面不能跟[-1]
。即使print
和之间有空格()
。如果不想在打印
中添加参数,则需要在括号前面加上+
符号以强制列表上下文
$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.`
如果您不使用语法作为参数,那么它也将按照您尝试的方式工作
print +(split'\.', $k)[-1];
您可以使用正则表达式捕获,而不是创建一个完整的列表并使用它来获取最后一个元素:
my $foo = (split '\.', $k)[-1];
print $foo;
输出:
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;
rindex()拆分最后一个位置,而index()从找到的第一个位置拆分
32
你应该打开
use strict
和use warnings
。它会告诉你@a[-1]
应该是$a[-1]
。事实上,我自己每次都会落入这个陷阱。:最明显的解决办法是,当它导致问题时,不要忽略打印的参数!打印((拆分“\”,$k)[-1])
最简单的解决方案是最难想到的@ikegami.)
print substr( $k, rindex($k, '.')+1 );