Alone:
Но вот интересно есть ли какие-нибуть другие способы?
Используй проверку успешности совпадения:
$a="a:12:b";
if ($a=~/^a:(\\d+):b$/)
{ print "n1=$1" }
# выводит n1=12 (все нормально)
$b="a:15:b";
if ($b=~/^a(\\d+):b$/) # создаю ситуацию не нахождения
{ print "n2=$1" } # в данном случае ничего не выведется
Alone:
P.S. И вот что интересно
$a="a:12:b";
$a=~/^a:(\\d+):b$/;
print "n1=$1";
# выводит n1=12
$b="a:15:b";
$b=~//;
print "n2=$1";
# выводит n2=15
При использовании пустого выражения в m// используется последнее успешно совпавшее.