[SP-pm] O que vocês estão aprontando?

Eden Cardim edencardim at gmail.com
Mon Aug 25 05:49:03 PDT 2008


2008/8/25 MrBiTS <mrbits em linuxmasters.info>:
> Esse cara está exigindo um pouco mais de trabalho mas, basicamente, basta descobrir o nome de cada seção e enviar os dados
> subsequentes a um parser específico. Nessas horas, sinto falta de uma estrutura case em Perl, que foi simulada por mim assim:
>
> my $caseS = "Perl"; # a variavel $caseS recebe um valor
> #
> if ( $caseS == "C++" ) {
>    print "sua escolha: $caseS";
> }
> elsif ( $caseS == "Java" ) {
>    print "sua escolha: $caseS";
> }
> elsif ( $caseS == "Perl" ) {
>    print "sua escolha: $caseS";
> }
> elsif ( $caseS == "PHP" ) {
>    print 'sua escolha: $caseS";
> }
> elsif ( $caseS == "TSE SAL" ) {
>    print "sua escolha: $caseS";
> }
> # default
> else {
>    print "Sua escolha $caseS nao e uma opcao valida";
> }

Perl não tem switch/case porque a sintaxe flexível fornece vários
mecanismos para obter o mesmo efeito. Quase sempre que você usa uma
estrutura dessas, na verdade você quer polimorfismo:

eval "require $caseS";
if($@) {
  print "opção inválida: $caseS";
} else {
  my $parser = $caseS->new;
  $parser->parse($text);
}

ou:

my %opts =(
  'C++' => sub { ... },
  'Java' => sub { ... },
  etc...
);

if(my $parse = $opts{$caseS}) {
  $parse->($text)
} else {
  print "opção inválida: $caseS";
}

ou até:

if(my $parse = $parser->can("handle_$caseS")) {
  $parser->$parse($text);
} else {
  print "opção inválida: $caseS";
}

lembre-se: TMTOWTDI

-- 
edenc.vox.com


More information about the SaoPaulo-pm mailing list