[Rio-pm] fazer string ficar undef

Tiago Peczenyj tiago.peczenyj em gmail.com
Terça Janeiro 8 09:45:23 PST 2013


Aureliano, veja que divertido:

open (my $file,"<",'/dev/null');

my $a = <$file>;

close($file);

use Data::Dumper;
print Dumper $a;

isso vai retornar undef, mas

open (my $file,"<",'/dev/null');

while(my $a = <$file>){
 print "a=$a";
}

close($file);

isto NÃO imprime nada. o while nem chega a executar pois undef é um valor
considerado "falso".

rode em um ambiente unix.

2013/1/8 Tiago Peczenyj <tiago.peczenyj em gmail.com>

> na duvida analise o retorno com Data::Dumper
>
> ex:
>
> use Data::Dumper;
> my $a= <>;
> print Dumper $a;
> Em 08/01/2013 15:10, "Aureliano Guedes" <guedes_1000 em hotmail.com>
> escreveu:
>
>  Renato, o motivo tambem não sei, mas varia de plataforma a plataforma,
>> pode ser CR, LF, e CRLF.
>>
>> Thiago, é apenas curiosidade.
>>
>> Mas valeu a todos.
>>
>> ------------------------------
>> From: renato.cron em gmail.com
>> Date: Tue, 8 Jan 2013 15:05:10 -0200
>> To: rio-pm em pm.org
>> Subject: Re: [Rio-pm] fazer string ficar undef
>>
>> o <> faz a leitura e retorna undef apenas se for o final do arquivo,
>> geralmente os arquivos de texto terminam com uma linha só com "\n", não
>> sei porque motivo!
>>
>> 2013/1/8 Aureliano Guedes <guedes_1000 em hotmail.com>
>>
>>  Valeu gente, agora entendi.
>>
>> Mas então a única forma de tornar uma string undef quando não há nada no
>> STDIN é fazendo: $b = undef if $b eq ''; ????
>>
>> Ou tem outra forma??
>>
>> my $b = <> || undef; não funcionaria, certo??
>>
>> > Date: Tue, 8 Jan 2013 14:30:11 -0200
>> > From: jimmy.tty em gmail.com
>> > To: rio-pm em pm.org
>> > Subject: Re: [Rio-pm] fazer string ficar undef
>>
>> >
>> > Saudações Aureliano,
>> >
>> > On Tue, Jan 08, 2013 at 03:43:10PM +0000, Aureliano Guedes wrote:
>> > [...]
>> > > Eu tenho o seguinte:
>> > >
>> > > chomp (my $b = <>);
>> > > $b = undef if $b eq '';
>> > > my $c = 'c';
>> > > my $a = defined($b) ? $b : $c;
>> > > print $a, "\n";
>> > >
>> > > Funciona perfeitamente, mas o que não entendo é porque se eu remover
>> a segunda
>> > > linha ($b = undef if $b eq '';).
>> > > Ja não funciona.
>> > Assim como o Renato Santos já mencionou, uma string vazia é "defined",
>> > logo, se fizermos:
>> >
>> > my $c = 'c';
>> > my $b = '';
>> > my $a = defined $b ? $b : $c;
>> > print '<'.$a.'>';
>> >
>> > o resultado será "<>"
>> >
>> > Para o problema que você mencionou, o que parece querer testar de fato é
>> > se há algum valor na string diferente de "undef" e de vazio:
>> >
>> > my $c = 'c';
>> > my $b = '';
>> > my $a = defined $b && $b ne '' ? $b : $c;
>> > print '<'.$a.'>';
>> >
>> > em outras palavras, qualquer coisa diferente de undef e vazio seriam
>> > atribuídos a "$a".
>> >
>> > --
>> > "Não manejo bem as palavras
>> > Mas manipulo bem as strings."
>> > ------------------------------
>> > http://tecnoveneno.blogspot.com
>> > _______________________________________________
>> > Rio-pm mailing list
>> > Rio-pm em pm.org
>> > http://mail.pm.org/mailman/listinfo/rio-pm
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>>
>>
>>
>> --
>> Saravá,
>> Renato CRON
>> http://www.renatocron.com/blog/
>> @renato_cron <http://twitter.com/#%21/renato_cron>
>>
>> _______________________________________________ Rio-pm mailing list
>> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>


-- 
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20130108/60dad002/attachment-0001.html>


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