, bu soru 4 yaşındadır . Ama ben cevabını çok ilginç bulmuştum, split
bunun gibi çalışabiliyordu. Bu yüzden, bu davranışı yeni okuyucular için açıklayan perldoc split'dan bir özü ile genişletmek istiyorum. :-)
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';
Perldoc kaynaktan:
MODEL yakalama gruplarını, daha sonra her bir ayırıcı, ek bir alan için, (bir grup tarafından yakalanan her substring için üretilir içeriyorsa hangi gruplar, geri bildirimlere göre belirtilmiştir); Herhangi bir grup eşleşmezse, bir alt dize yerine undef değerini yakalar. Ayrıca, böyle bir ek alanın bir ayırıcı olduğunda (yani, bir bölünme olduğunda) üretildiğine ve böyle bir ek alanın LIMIT'e doğru sayılmadığına dikkat edin. Liste kapsamında değerlendirilen aşağıdaki ifadeleri düşünün (ilişkili açıklamada sağlanan her döndürülen liste):
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')
Yinelenen: http://stackoverflow.com/questions/1098295/perl-is-there-a-way-to-split-on-the-last-regex -match-only-only- – Zaid