[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