[Rio-pm] negacao com regex /^x/

Eden Cardim edencardim em gmail.com
Terça Abril 7 13:39:59 PDT 2009


2009/4/7 Victor Ramos <victornrm em gmail.com>:
> me surgiu uma duvida, não sei c eh um bug do perl o.0
> vejamos
> :~$date
> Ter Abr  7 17:20:00 BRT 2009
> :~$cat facu_ou_folga.pl
> if ( `date` =~ /Sab|Dom/) {
>   print "Folga!\n";
> } else {
>   print "Facu\n";
> }
> :~$perl facu_ou_folga.pl
> Facu
>
> perfeito
> agora, tentando ao contrario usando a negacao.
> :~$cat facu_ou_folga.pl
> if ( `date` =~ /^(Sab|Dom)/) {
>   print "Facu!\n";
> } else {
>   print "Folga\n";
> }
> :~$perl facu_ou_folga.pl
> Folga
> :~$
>
> Oque ouve? estou usando a negação "^", a logica deveria ser, caso não achar
> Sab ou Dom,  tirei como exemplo do learning perl(A.13. Answers to Chapter 14
> Exercises), q tem um assim:
>     if (`date` =~ /^S/) {
>       print "go play!\n";
>     } else {
>       print "get to work!\n";
>     }
>
> com um obs: "If we had to use this in a real-world program, we'd probably
> use the pattern /^(Sat|Sun)/"
>
> eu percebi que posso negar com o not (não logico) "!" :
> :~$cat facu_ou_folga.pl
> if ( `date` =~ !/(Sab|Dom)/) { # unless ( `date` =~ /(Sab|Dom)/) {
>   print "Facu!\n";
> } else {
>   print "Folga\n";
> }
> :~$perl facu_ou_folga.pl
> Facu!
> :~$
>
> alguem me socorre?

"^" só é negação dentro da especificação de uma classe de caracteres:
[^a] (todos os caracteres menos o "a").
Fora de uma classe de caracter, "^" é uma asserção de largura nula que
ancora pro começo da string.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://edenc.vox.com/            http://www.shadowcat.co.uk/servers/


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