Вопрос: Как получить последний элемент разделения на Perl?


$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.


5


источник


Ответы:


Перл приписывает открытую круглую скобку ( к функции печати. Синтаксическая ошибка исходит из того, что print() не может следовать [-1], Даже если между пробелами есть пробел print а также (), Вам необходимо прикрепить скобку + знак, чтобы вызвать контекст списка, если вы не хотите добавлять print,

print  +(split'\.', $k)[-1];

Если вы не используете свой синтаксис как параметр для чего-то, что ожидает наличия парсеров, оно также будет работать так, как вы пытались.

my $foo = (split '\.', $k)[-1];
print $foo;

17



Вместо создания полного списка и нарезка  чтобы получить последний элемент, вы можете использовать захват регулярных выражений:

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

8