Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中获取拆分的最后一项?_Perl_Split - Fatal编程技术网

如何在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]; #

我希望打印拆分的最后一个元素,而不必使用中间变量。有办法做到这一点吗?我使用的是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];                           # 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 );