$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.`
我想打印出split的最后一个元素,而不必使用中间变量。有没有办法做到这一点?我正在使用Perl 5.14。
Perl将开括号(
归因于print函数。语法错误来自于print()
后面不能跟着[-1]
,哪怕在print
和()
之间有空格也一样。如果您不想添加括号到print
中,您需要在括号前加上+
号以强制列表上下文。
print +(split'\.', $k)[-1];
如果您未将语法用作期望具有圆括号的某些参数,则它也可以按照您尝试的方式工作。
my $foo = (split '\.', $k)[-1];
print $foo;
print
的括号!print( (split'\.', $k)[-1] );
- ikegami使用正则表达式捕获,而不是创建完整列表并对其进行切片以获取最后一个元素:
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
rindex() 函数从最后一个位置开始分割,而 index() 函数从第一个位置开始分割。
print substr( $k, rindex($k, '.')+1 );
use strict
和use warnings
。它会告诉你@a[-1]
应该改为$a[-1]
。 - simbabque