r3 - 06 Aug 2006 - JoenioCosta
Como expandir variáveis dentro de uma string
Problema
Você tem uma string contendo nomes de variáveis que não foram expandidas:$text = 'foo é $foo e bar é $bar';...e gostaria de substituir as variáveis por seus valores em tempo de execução.
Solução
Coloque as variáveis dentro de um hash e use a expressão regular para substitui-las por seu valor:
%var = (
foo => 23,
bar => 19,
);
$text =~ s/\$(\w+)/$var{$1}/g;
Discussão
Você poderia usar uma substituição com duplo-eval ("eeg"):$text =~ s/(\$\w+)/$1/eeg;O primeiro /e transforma $1 em $foo, e o segundo recupera seu valor. No entanto, se o nome da variável não existir, isso poderá causar um erro de execução. Para evitar isso, você poderia colocar a expressão regular dentro de um eval:
eval { $text =~ s/(\$\w+)/$1/eeg };
die if $@;
Ainda assim, a string poderia acessar qualquer variável dentro do módulo, o que pode não ser desejável.
Nesse caso, a melhor solução é utilizar um hash para armazenar as variáveis que poderão ser acessadas a partir da string:
%var = (
foo => 23,
bar => 19,
);
$text =~ s/\$(\w+)/$var{$1}/g;
Comentários
- Muito bom.. a questão da segurança foi boa.. e o "eeg" eu nem sabia da funcionalidade :P -- GabrielVieira - 08 Mar 2006 - 20:23
