Que tal algo assim (como uma solução inicial, mas não-ótima) :<br><br>copy($file, $backup);<br>open( ARQUIVO, &#39;&gt;&#39;, &quot;$file&quot; );<br>open( BACKUP, &#39;&lt;&#39;, &quot;$backup&quot; );<br>while(my $linha = &lt;BACKUP&gt;) {
<br>&nbsp;&nbsp;&nbsp;&nbsp; chomp $linha;<br><br>&nbsp;&nbsp;&nbsp;&nbsp; if ( ! grep { $linha eq $_ } @nomes ) { # se ( linha não tá na lista de nomes )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print ARQUIVO $linha,&quot;\n&quot;;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>}<br>close ARQUIVO;<br>close BACKUP;<br><br>
Claro, usar grep aqui é feio, mas é só uma solução inicial... o ideal seria usar first() (List::Util ? ) ou fazer um loop à mão, testando com eq - pra quê regexp ?.<br><br>Ou então o que *eu* faria:<br><br># no começo<br>
my %hash_nomes; @hash_nomes{ @nomes } = (); # automa<span style="font-weight: bold;">g</span>icamente criar um hash cujas chaves sejam os nomes.<br><br># no lugar daquele if:<br>if ( ! exists $hash_nomes{ $linha } ) { # se (existe a chave $linha no hash de nomes)
<br><br>Mas fique de olho no fluxo do seu programa: você tava fazendo um loop que chama o excluir_nomes, e só depois de acabar o loop é que você tava abrindo os arquivos.<br><br>E, o mais importante:<br>use strict;<br>use warnings;
<br><br>[]s<br><br>Wendel<br><br><br><div><span class="gmail_quote">On 9/4/07, <b class="gmail_sendername">Rafael Lebrão Martins</b> &lt;<a href="mailto:rafamv1@ig.com.br">rafamv1@ig.com.br</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;">
Boa tarde, pessoal. Abaixo está o trecho de um &quot;código&quot; que estou escrevendo<br>para apagar vários valores em um arquivo de texto. Quando digito os nomes<br>que serão removidos e teclo enter, todos os dados do arquivo são apagados.
<br>Estou utilizando a sub &quot;excluir_nomes&quot; de forma incorreta?!<br><br>my $name;<br>foreach $name(@nomes) {<br>excluir_nomes($name);<br>}<br>copy($file, $backup);<br>open( ARQUIVO, &#39;&gt;&#39;, &quot;$file&quot; );
<br>open( BACKUP, &#39;&lt;&#39;, &quot;$backup&quot; );<br><br>sub excluir_nomes {<br>foreach (&lt;BACKUP&gt;) {<br>next if $_ =~ /^$name$/;<br>print ARQUIVO $_;<br>&nbsp;&nbsp; }<br>}<br>close (ARQUIVO);<br>close (BACKUP);<br></blockquote>
</div><br>