Это не делает то, что вы ожидаете. Вьющиеся переходы означают, что в них нет подстановки переменных, поэтому, когда вы вызываете GET_PLAYER_INFO, вы устанавливаете для первого параметра точную последовательность байтов, содержащуюся в фигурных скобках, то есть: 1,"$name"
В рамках процедуры имя_плеера установлено равным $name
, поэтому ваша строка регулярного выражения расширяется до:
regexp '$name' "Ronaldo is awesome" match
Таким образом, он пытается сопоставить конец строки с последующим «name».
Если вы хотите использовать переменный параметр по умолчанию, вам действительно следует установить для него некоторое защитное значение, а затем извлечь его из внешнего источника, когда он не изменен, например:
proc proc GET_PLAYER_INFO {player_id {player_name ""}} {
global name
if {$player_name eq ""} { set player_name $name }
regexp "$player_name" "Ronaldo is awesome" match
puts $match
}
Перечитайте внимательно Tcl (1) , уделяя особое внимание частям, касающимся группировки.