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

use*_*626 7 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.`
Run Code Online (Sandbox Code Playgroud)

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

sim*_*que 19

Perl将开括号归因(于打印功能.语法错误来自于print()无法遵循的[-1].即使print和之间有空格().+如果您不想为自己添加parens,则需要在括号前添加一个强制列表上下文的符号print.

print  +(split'\.', $k)[-1];
Run Code Online (Sandbox Code Playgroud)

如果您没有将语法用作期望具有parens的参数,那么它也将以您尝试的方式工作.

my $foo = (split '\.', $k)[-1];
print $foo;
Run Code Online (Sandbox Code Playgroud)

  • 或者最明显的解决方案,当它导致问题时,不要省略`print`的parens!`print((split'\.',$ k)[ - 1]);` (10认同)
  • 最简单的解决方案是最难想到的@ikegami.:) (3认同)

Ken*_*sis 8

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

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;
Run Code Online (Sandbox Code Playgroud)

输出:

32
Run Code Online (Sandbox Code Playgroud)