[Cascavel-pm] Inversao de variavel
Luis Campos de Carvalho
lechamps em terra.com.br
Terça Setembro 23 13:54:11 CDT 2003
Alceu R. de Freitas Jr. wrote:
> --- Luis Campos de Carvalho <lechamps em terra.com.br>
> escreveu:
>
>> # Bico!
>> sub reverse_octets{
>> my $ip = shift || '127.0.0.1';
>> return
>> $ip =~
>>m/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/ ?
>> "$4.$3.$2.$1" : undef;
>> }
>>
>> # para usar:
>> print reverse_octets '200.10.5.1';
>>
>> Se você se interessar como funciona, o Alceu
>>explica! =-]
>
>
> "$4.$3.$2.$1" : undef;
>
> Para ser sincero, não entendi a função dos ":" na
> linha acima. Eu lembro vagamente que Perl tem uma
> estrutura que emula um if-then-else, mas eu nunca
> usei... seria isso?
>
=-]
Desculpe. Eu virei o fogo para o seu lado, e nem sabia se você estava
com as batatas prontas para assar... eheheh....
Quanto à sintaxe maluca, vamos entender, então.
Se você algum dia usou C, deve ter cruzado com o operador ternário
(de três caracteres) que C usa para emular um if-then-else "inline",
isso é, em uma única expressão que retorna um 'rvalue', um valor que
pode ser atribuído a expressões do tipo 'lvalue' (variáveis e outros
"quitutes").
O operador é o
<boolean>? <expr1> : <expr2>;
note os sinais de pontuação. O funcionamento é simples: se <boolean>
é uma expressão que resolve para "true", o operador ?: retorna <expr1>.
Caso <boolean> resolva para "false", o operador ?: retorna <expr2>.
De volta no casinho da inversão de octetos:
return
$ip =~ m/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/ ?
"$4.$3.$2.$1" :
undef;
Repare no operador ?:, em torno desta baderna.
O que temos, na verdade, é um pattern match (que retorna a quantidade
de matches conseguidos, em contexto escalar), usado como <boolean> do
operador '?:'. Para completar, temos
<expr1> == "$4.$3.$2.$1"
<expr2> == undef
Assim, a instrução pergunta: "Isto parece com um endereço IP?"
E, se a resposta for "sim", retorna o valor invertido "$4.$3.$2.$1".
Caso a resposta seja "não", retorna undef, para indicar erro.
Espero que esteja claro agora.
Será que o Leandro conseguiu usar essa coisa?
[]'z!
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Luis Campos de Carvalho is Computer Scientist,
PerlMonk [SiteDocClan], Cascavel-pm Moderator,
Unix Sys Admin && Certified Oracle DBA
http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Mais detalhes sobre a lista de discussão Cascavel-pm