[SP-pm] Retorno de uma sub dentro da RE

Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Maio 23 09:32:37 PDT 2007


On May 23, 2007, at 6:07 PM, Iberê O. Kuntz de Souza wrote:
> Pessoal,
>
> Imaginem a situação seguinte. Usando a Sys::Hostname::FQDN, consigo
> obter o host completo com a fqdn() e o primeiro nome com a short().
>
> Preciso do domínio, que é o fqdn() - short(). Claro que sabendo que o
> separador é o ponto (.) fica fácil resolver isso, aqui eu fiz assim:
>
> my ($domain) = (fqdn() =~ /^[^\.]+\.(.*)$/);
>
> Aceito sugestões, se alguém souber de uma maneira melhor.
>
> O que eu fiquei curioso foi, existe alguma maneira de eu colocar uma
> sub dentro da expressão, ao invés de usar [^\.]+, usar o retorno da
> short()?
>
> Obrigado
>
> Use o modificador /e para executar rotinas e funçoes de dentro da  
> regex.

   NÃO!!!!

   O /e (eval) funciona APENAS para substituições, e no LADO DIREITO  
(a parte que vai ser colocada no lugar).
   NÃO EXISTE forma de construir uma REGEX dinâmicamente, através da  
chamada de funções, diretamente dentro do operador m//.

   E MUITO CUIDADO ao usar /e (eval) em expressões regulares! Os  
maiores furos de segurança que eu explorei foram originados neste  
tipo de construção! :-)

   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




Mais detalhes sobre a lista de discussão SaoPaulo-pm