[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