Sintaxe da variável Perldoc:$foo versus ${foo}
Pergunta
Eu estava navegando nos perldocs quando me deparei com isso em um exemplo ( http://perldoc.perl.org/perlre.html#Regular-Expressions - veja exemplo de grupos de captura)
"aa" =~ /${a}/; # True
"aa" =~ /${b}/; # True
"aa0" =~ /${a}0/; # False!
"aa0" =~ /${b}0/; # True
"aa\x08" =~ /${a}0/; # True!
"aa\x08" =~ /${b}0/; # False
Não consegui encontrar nenhuma documentação sobre o que essa sintaxe significa.
Então, o que a regex /${a}/ significa neste contexto?
Solução
$ entre colchetes evita a ambigüidade dos nomes das variáveis.De tal modo que:
$foo = 'house';
'housecat' =~ /$foo/; # matches
'cathouse' =~ /cat$foo/; # matches
'housecat' =~ /${foo}cat/; # matches
Também no link que você forneceu há uma definição para $a e $b, mas você esqueceu de copiar aqui.
Outras dicas
Os colchetes são necessários para desambiguar $a
de $a0
.Observe que o tokenizer é ganancioso, então um nome de variável é o mais longo sequência possível.Se em uma interpolação de variável segue outro número alfabético ou numérico, você precisa do ${name}
sintaxe.