[Cascavel-pm] Problema com strings

Luis Campos de Carvalho lechamps em terra.com.br
Sexta Julho 25 15:49:37 CDT 2003


Nelson Ferraz wrote:
>>Algum dos senhores sabe se existe um modulo que trabalhe de maneira
>>semelhante ao strings(gnu strings). Estava procurando aqui e nao achei
>>nada ... (quero evitar utilizar system() e cia)
> 
> Que tal um loop e uma expressão regular?
>
> while (<>) {
>   s/[^[:print:]]//g; # remove non-printable chars
>   print;
> }
> 

   Desculpe, Nelson.
   Eu fui ler o que fazia o tal "strings" depois.
   Não sei de onde eu tirei que você estava mexendo com o strings.h...

   A solução proposta é interessante. Eu apenas "enxuguei" mais:

   s/[^[:print:]]//g && print while <>;


   # Daqui pra baixo é diversão.
   # Espero que alguém se interesse... =-]

   Por outro lado, o strings determina que existam pelo menos 4 
caracteres imprimiveis (ou um número dado):

   s/[^[:print:]]//g && /[:print:]{4,}/ && print while <>;

   Para terminar, ambas em forma de sub, mais flexível:

   # A versão proposta inicialmente
   sub strings{
     local $_ = shift;
     s/[^[:print:]]//g && return $_;
     return undef;
   }

   # A versão que mostra apenas strings com mais que X caracteres:

   sub strings{
     my( $num_chars, $str ) = ( shift, shift );
     $str =~ s/[^[:print:]]//g &&
       $str =~ m/[:print:]{$num_chars,}/ &&
         return $str;
     return undef;
   }

   # Uma versão que trabalha com array na entrada:

   sub array_strings( $\@ ){
     my( $char, $data ) = ( shift, shift );
     if( wantarray ){
     $str =~ s/[^[:print:]]//g &&
       $str =~ m/[:print:]{$char,}/ &&
         push @$result, $str
           foreach @$data;
     }else{
     $str =~ s/[^[:print:]]//g &&
       $str =~ m/[:print:]{$char,}/ &&
         $result .= $str
           foreach @$data;
     }
     return ref $result? @$result : $result;
   }

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   Luis Campos de Carvalho is Computer Scientist,
   PerlMonk [SiteDocClan], Cascavel-pm Moderator,
   Unix Sys Admin && Certified Oracle DBA
   http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




Mais detalhes sobre a lista de discussão Cascavel-pm