que sé, esta pregunta es de 4 años de edad . Pero encontré la respuesta de YOU muy interesante ya que no sabía split
podría funcionar así. Así que quiero expandirlo con un extracto del perldoc split que explica este comportamiento, por el bien de los nuevos lectores. :-)
my $str = "1:2:3:4:5";
my ($a, $b) = split /:([^:]+)$/, $str;
# Capturing everything after ':' that is not ':' and until the end of the string
# Now $a = '1:2:3:4' and $b = '5';
De Perldoc:
Si el patrón contiene la captura de los grupos, a continuación, para cada separador, un campo adicional se produce para cada subcadena capturada por un grupo (en el orden en que el se especifican los grupos, según las referencias posteriores); si algún grupo no coincide, captura el valor undef en lugar de una subcadena. Además, tenga en cuenta que cualquier campo adicional se produce siempre que haya un separador (es decir, siempre que se produzca una división), y dicho campo adicional no cuenta para el LIMITE. (Lista de cada devueltos se proporciona en el comentario asociado) Considere las siguientes expresiones evaluadas en el contexto de la lista:
split(/-|,/, "1-10,20", 3)
# ('1', '10', '20')
split(/(-|,)/, "1-10,20", 3)
# ('1', '-', '10', ',', '20')
split(/-|(,)/, "1-10,20", 3)
# ('1', undef, '10', ',', '20')
split(/(-)|,/, "1-10,20", 3)
# ('1', '-', '10', undef, '20')
split(/(-)|(,)/, "1-10,20", 3)
# ('1', '-', undef, '10', undef, ',', '20')
duplicado: http://stackoverflow.com/questions/1098295/perl-is-there-a-way-to-split-on-the-last-regex -match-only – Zaid