$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。
答案 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 );