É possível condicionar a execução de diretivas através de expressões condicionais. Exemplo:
#!/usr/bin/perl
@Senhas = ("Curioso","Intrometido","Invasor"); # Lista de senhas
# Script CGI simples para exigir senha #
# Na primeira condição, unless é testado se a entrada padrão contém a #
# palavra 'segredo'. Se não for o caso, é gerado um HTML com um #
# pequeno formulário para a entrada da senha. Ao se enviar o #
# formulário, este script é novamente acionado. #
# Como o nome do campo para a senha agora é 'segredo', o script #
# entra no ramo else. Neste ramo, a senha digitada é procurada na #
# lista de senhas. #
read(STDIN, $Input, $ENV{'CONTENT_LENGTH'}); # Leitura da entrada padrão
unless($Input =~ /segredo/) # Se não contiver 'segredo'...
{
print "Content-type: text/html\n\n"; # HTTP-Header para o HTML
print "<html><head><title>SENHA</title></head>\n"; # Arquivo HTML
print "<body bgcolor=#COCOCO><h1>Senha</h1>\n";
print "<form action=\"\\cgi-bin/test.pl\" method=post> \n";
print "<input type=password name=\"segredo\" maxlength=15 size=15> \n";
print "<input type=submit value=\"Enviar\" name="submit"> \n";
print "<input type=reset value=\"Cancelar\" name="reset"> \n";
print "</form></body></html>\n";
exit(0);
}
else # se tiver 'segredo'...
{
print "Content-type: text/html\n\n"; # HTTP-Header para o HTML
print "<html><head><title>SENHA</title></head>\n"; # Arquivo HTML
print " <h1>Senha</h1>\n";
($nome, $valor) = split(/=/, $Input);
for(@Senhas) # Rastrear lista de senhas
{
if($valor eq $_) # Se o valor fornecido for igual à senha
{
$Sucesso = "sim";
last; # Terminar o laço for
}
else # Se não encontrar a senha na lista
{
$Sucesso = "nao";
}
}
if($Sucesso eq "sim")
{
print "<b>Acesso Permitido!</b>\n"; # Aqui, por exemplo, podemos
enviar o freguês para uma URL secreta
}
else
{
print "<b>Desculpe, sua senha está incorreta.
Seu acesso foi negado !</b>\n";
}
print "\n";
exit(0);
}
Com if pode-se iniciar uma condição se-então (if = se). Logo após o if, dita-se a condição entre parênteses. Para formular a condição, necessita-se de operadores relacionais para números ou strings, geralmente também variáveis ou expressões regulares.
Uma outra possibilidade para formular uma condição se-então é através do uso de unless (unless = quando não). As regras são as mesmas do if. A diferença reside no fato de que com unless não é checado se a condição foi atendida, mas sim, se a condição não foi atendida para executar a porção do código dependente da referida condição.
Quando se quer criar um bloco de condições, utiliza-se uma ou várias elsif (elsif = ou quando) logo após a primeira condição if/unless (atenção: o correto é elsif e não elseif !).
Com else (else = senão) define-se o ramo de código que deve ser executado caso a condição if, unless ou elsif não seja atendida.
Observações: Tudo que estiver num ramo criado por condições if, unless, elsif ou else, precisa estar entre chaves, mesmo que se trate apenas de uma única diretiva. |
Existe uma sintaxe especial para expressões condicionais simples que pode ser utilizada como alternativa às expressões if/else. Exemplo:
#!/usr/bin/perl
$Resultado =
$ENV{'HTTP_USER_AGENT'} =~ /98/ ? "Win 98/NT" : "não é Win 98/NT";
print "Content-type: text/html\n\n";
print "<html><head><title>Usuário</title><head>\n";
print "<body>\n";
print " <h1>Você possui ", $Resultado, "!</h1>\n";
print "</body></html>\n";
exit(0);
Uma avaliação se-então simples é iniciada por uma condição - no exemplo, $ENV{'HTTP_USER_AGENT'} =~ /95/ - seguida por um ponto de interrogação ?. Após o ponto de interrogação, segue um valor, que será o atual se a condição for satisfeita. Logo a seguir são colocados dois pontos : e o valor que será assumido caso a condição não seja atendida. Como se tratam de valores que só poderão ser processados se estiverem armazenados, geralmente atribui-se o resultado de uma avaliação se-então a uma variável qualquer - no exemplo, a escalar $Resultado.
Para formular uma condição é necessário usar-se operadores relacionais (de comparação).
|