<div class="gmail_quote">
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">Olá pessoal, estou com um problema na criação de métodos no Perl, a minha estrutura atual é a seguinte:</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">C:\perl\lib\Teste\Controller</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font size="3"><font face="Calibri">Na pasta controller (business manager) tenho o arquivo <a href="http://cliente.pm/" target="_blank">cliente.pm</a></font></font></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">package Teste::Controller::Cliente;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">sub Consulta {</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>use Teste::Model::Cliente; </span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my ($res, $conn) = Teste::Model::Cliente::Consulta();</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>return($res, $conn);</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">}</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">========================================================================= </font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">C:\perl\lib\Teste\Model</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">Na pasta Model (Banco de Dados) tenho dois arquivos o <a href="http://cliente.pm/" target="_blank">cliente.pm</a></font></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">package Teste::Model::Cliente;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">sub Consulta {</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>use Teste::Model::MySql; </span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $db = Teste::Model::MySql::Conecta();</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span><span> </span>if ($db ne "")</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>{</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $conn = Teste::Model::MySql::Query($db, "SELECT id_cliente, nome FROM cliente");</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my (@fields) = ("id_cliente", "nome");<span> </span></span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my %results;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>@results{@fields} = ();</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>$conn->bind_columns(map { \$results{$_} } @fields);<span> </span></span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>return (\%results, sub { $conn->fetch() });</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>}</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>else</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>{</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>return ("false", "false");</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>}<span> </span></span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">}</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"> </span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%">E o outro arquivo MySql.pm</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%"><span> </span></span><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">package Teste::Model::MySql;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>use DBI;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"></span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">sub Conecta</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">{</span></p><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $driver<span> </span>= "mysqlPP";</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $server<span> </span>= "localhost";</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $database = "banco";</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $user<span> </span>= "usuario";</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $password = "senha";</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"></span> </p></span></span>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $url<span> </span>= "DBI:$driver:$database:$server";</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $dbh = DBI->connect( $url, $user, $password,</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>{ PrintError => 0 });;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>return($dbh);</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">}</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">sub Query</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">{</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my($conn, $consulta) = @_;</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $sql = qq{ $consulta };</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>my $sth = $conn->prepare( $sql );</span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>$sth->execute() ;<span> </span></span></p>
<p style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'"><span> </span>return($sth);</span></p>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">}</span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">========================================================</span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">pasta onde estaria o site web</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">C:\inetpub\wwwroot\ListaCliente.pl</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3"> </font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">use Teste::Controller::Cliente;</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">print "Content-type: text/html\n\n";<br>print "<html>\n";<br>print "<head>\n";<br>print " <title>Lista Clientes</title>\n";<br>
print "</head>\n";<br>print "<body>\n\n";</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">my ($res, $conn) = Teste::Controller::Cliente::Consulta();</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3">if ($res ne "false") <br>{<br> while ($conn->()) {<br> print "$res->{id_cliente} - \n";<br> print "$res->{nome} \n";<br>
print "<br>";<br> }<br>}</font></p>
<p style="MARGIN: 0cm 0cm 10pt"><font face="Calibri" size="3"> <br>print "</body>\n";<br>print "</html>\n";</font></p></span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">==========================================================</span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">Essa estrutura até funciona mas quando eu manipulo os registros na camada controller (Cliente.pm) eu nao consigo listar novamente os registros na camada de visualização(ListaCliente.pl) </span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">Gostaria de saber se alguem tem um exemplo melhor de como dividir a aplicação em camadas, e como eu poderia modificar essa estrutura de uma forma mais simplificada.</span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">Estou usando esta estrutura em uma maquina com windows2003 + IIS + MySql.</span></div>
<div style="MARGIN: 0cm 0cm 10pt"><span style="FONT-SIZE: 8pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'">Obrigado...</span></div></div>