<span style="font-family: courier new,monospace;">Eden, não é por nada não, mas acho que o código ganhou uma complicação /abstração desnecessária. Eu prefiro a solução do champs.<br><br>Solli M. Honório<br></span><br><div>
<span class="gmail_quote">On 3/22/07, <b class="gmail_sendername">Eden Cardim</b> &lt;<a href="mailto:edencardim@gmail.com">edencardim@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 3/20/07, Daniel Ruoso &lt;<a href="mailto:daniel@ruoso.com">daniel@ruoso.com</a>&gt; wrote:<br>&gt; Olha que hoje pra mim o código não me parece tão ruim assim... Acho que<br>&gt; os if&#39;s encadeados deixam mais claro as operações que estou fazendo...
<br>&gt; Mas, para exercitar, como você faria?<br><br>Eu sei que a pergunta não foi pra mim, mas já que o tema da semana é<br>&quot;padrões de projeto&quot;, eu usaria um Chain of Responsability. Seria algo<br>assim:<br><br>
&lt;untested code&gt;<br><br>package AddressExtractor;<br><br>use Moose;<br><br>has parsers =&gt; (isa &#39;ArrayRef&#39;, is =&gt; &#39;rw&#39;, default =&gt; sub {[]});<br><br>sub add_parser {<br>&nbsp;&nbsp;push @{shift-&gt;parsers}, shift;
<br>}<br><br>sub parse {<br>&nbsp;&nbsp;my($self, $address) = @_;<br>&nbsp;&nbsp;my @parsed;<br>&nbsp;&nbsp;foreach my $parser (@{$self-&gt;parsers}) {<br>&nbsp;&nbsp;&nbsp;&nbsp;last if @parsed = $parser-&gt;parse($address);<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return @parsed;<br>}<br><br>package ParserA;
<br><br>use Moose;<br><br>sub parse {<br>&nbsp;&nbsp;my($self, $address) = @_;<br>&nbsp;&nbsp;if($address =~ /^rua\,*\s*(.+)$/i) {<br>&nbsp;&nbsp;&nbsp;&nbsp;my ($t,$l,$n,$c);<br>&nbsp;&nbsp;&nbsp;&nbsp;#lógica de extração aqui...<br>&nbsp;&nbsp;&nbsp;&nbsp;return ($t,$l,$n,$c);<br>&nbsp;&nbsp;}<br>}<br><br>package ParserB;
<br><br>#etc...<br><br>package main;<br><br>my $extractor = AddressExtractor-&gt;new();<br>$extractor-&gt;add_parser( ParserA-&gt;new() );<br>$extractor-&gt;add_parser( ParserB-&gt;new() );<br><br>my ($t,$l,$n,$c) = $extractor-&gt;parse(&quot;Av. Foo, etc...&quot;);
<br><br>&lt;/untested code&gt;<br><br>--<br>Eden Cardim<br>Instituto Baiano de Biotecnologia<br>Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas<br>Laboratório de Bioinformática<br>--<br>&quot;you seem to think that &#39;close enough&#39; is close enough...
<br>please learn to be &#39;literal&#39; around programming.&quot;<br>merlyn - on irc.freenode.net#perl<br>_______________________________________________<br>Cascavel-pm mailing list<br><a href="mailto:Cascavel-pm@pm.org">
Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br>