Когда вы пишете переменную внутри скобки, она вызывает контекст списка. Это означает, что материал, который вы хотите назначить этой переменной, будет также интерпретироваться как список.
В вашем случае у вас нормальный матч. Возвращаемое значение совпадения - это список, содержащий все совпадения. Если вы принудительно перенаправляете список на скалярный контекст, возвращается количество записей внутри этого списка. Таким образом, у вас есть 1 совпадение, что означает, что этот список содержит 1 совпадение.
Не рекомендуется использовать возвращаемое значение регулярного выражения.
Вы можете использовать переменные $1, $2, $3,...
для совпадений (совпадений из скобок).
В вашем случае:
$a =~ /(\d+)/;
$x = $1;
КСТАТИ: $a
и $b
специальные переменные для sort
. Пожалуйста, не используйте их :).
($x) = $a =~ /(\d+)/;
# $x is the first element of the RegEx return value
# ($x, $y, $z) = $a =~ /(\d)(\d)(\d)/;
# $x = first match, $y = second and so on.
нет флага/g, поэтому он не будет пытаться сопоставлять более одного раза – ysth