[Cascavel-pm] Teste de variável na inicialização de um módulo.

Daniel R. Antunes danielrantunes em yahoo.com.br
Sexta Junho 16 13:31:46 PDT 2006


    Oi Igor, muito grato pela ajuda.
    Na verdade o módulo G é um "adendo" de um objeto chamado Inq; este 
objeto se comporta diferente de acordo com a informação fornecida em um 
XML e neste caso eu não posso setar na inicialização do objeto pois este 
já existe qdo o módulo G é invocado. Assim como o módulo G eu tenho o T, 
TP, GT e J que se conectam a lugares diferentes com senhas diferentes e 
enviando solicitações em formatos diferentes. O "-t" é uma forma de 
debug na conexão com estes servidores. É realmente complicado. :)
    Conforme sugestão do caro amigo Flávio eu tentei o INIT e o BEGIN da 
seguinte forma :

package modules::G;
require Exporter;
use strict;
use LWP::UserAgent;
use funcs;
# Export some symbols
our @ISA                =    qw(Exporter);
our @EXPORT            =    qw(    &construct_G_XML_doc
                                            submit_G
                                            &g_start
                                            &g_char
                                            &g_end);
our @EXPORT_OK    =    qw();
our $VERSION        =    0.01;
# Global variables
my $false=0;
my $true=1;
my $gsubmission_url;
my $gretrieval_url;
my $glogin;
my $gpass;
INIT{
    if ($main::TEST){
       $gsubmission_url='http://url/de/testes';
       $gretrieval_url=' http://url/de/testes/RetrieveListenerServlet';
       $glogin='LOGIN';
       $gpass='PASS';
    }
    else{
       $gsubmission_url='http://url/live';
       $gretrieval_url=' http://url/live/RetrieveListenerServlet';
       $glogin='LOGIN_OFICIAL';
       $gpass='SENHA_OFICIAL';
    }
}
# Used by parsers
my %audit_info;
my %summary_info;
my %product;
my $spCode;

    Ambos não funcionaram tbem.
    Um exemplo de sub dentro do módulo G seria este :

sub construct_T_XML_doc{
    my $obj=shift;
    if ($obj->{searchingByID}){
        $obj->{xml}.="<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
        $obj->{xml}.="<SByID xmlns=\"http://g.com/webservices/\">\n";
        $obj->{xml}.="\t<clIdInfo>";
        $obj->{xml}.=$obj->parse_block("\t\t\t\t<IdInfo id=\"{svccode}\" 
/>",'services');
        $obj->{xml}.="\t</clIdInfo>";
        $obj->{xml}.="</SByID>\n";
        $obj->{soapaction}="SByID"
    }
    ... <-Aqui ele se conecta usando as variáveis gsubmission_url, etc...
}

    Se eu coloco o if dentro desta sub (por exemplo) o danado funciona.
    Neste caso Flávio creio que seja necessário testar a variável "TEST" 
em tempo de execução.
    Obrigado amigos.


Igor Sutton wrote:

> Daniel,
>
> Segue um exemplo:
>
> t.pl:
> <code>
> use strict;
> use warnings;
>
> use G;
>
> # é necessário para que o módulo G possa enxergar a variável.
> our $TEST = 1;
>
> G->run();
> </code>
>
> G.pm <http://G.pm>:
> <code>
> package G;
>
> sub run {
>     my $instance = "live";
>     $instance = "test" if ($main::TEST);
>     print "$instance\n";
> }
> 1;
> </code>
>
> Então, o *our* é necessário para que a variável possa ser vista fora 
> do escopo do pacote main.
>
> Espero que ajude.
>
> On 6/16/06, * Daniel R. Antunes* <danielrantunes em yahoo.com.br 
> <mailto:danielrantunes em yahoo.com.br>> wrote:
>
>         Olá amigos da lista...
>         Eu postei esta mensagem no "perl-br" mas infelizmente ninguém
>     respondeu, desculpem se minha pergunta for obvia por demais, mas é
>     uma dificuldade que estou tendo e não conseguindo resolver. Eu
>     venho da linguagem C/C++ e ainda apanho com alguns aspectos do
>     Perl, principalmente as questões relacionadas a namespaces,
>     variáveis de pacote, escopos léxicos, enfim... Acho que tenho me
>     saido bem na migração, mas... Obs: Eu encomendei o livro "Perl for
>     C programmers" para ver se paro de encher a paciência dos amigos
>     com estas perguntas. :)
>         Bom, vamos ao problema que estou tendo :
>
>     package modules::G;
>     require Exporter;
>     use strict;
>     use LWP::UserAgent;
>     use funcs;
>     # Export some symbols
>     our @ISA                =    qw(Exporter);
>     our @EXPORT            =    qw(    &construct_G_XML_doc
>                                                 submit_G
>                                                 &g_start
>                                                 &g_char
>                                                 &g_end);
>     our @EXPORT_OK    =    qw();
>     our $VERSION        =    0.01;
>     # Global variables
>     my $false=0;
>     my $true=1;
>     my $gsubmission_url;
>     my $gretrieval_url;
>     my $glogin;
>     my $gpass;
>     # Used by parsers
>     my %audit_info;
>     my %summary_info;
>     my %product;
>     my $spCode;
>
>         Isto faz parte do módulo G de meu sistema (um daemon) e está
>     funcionando
>     perfeitamente.
>         Mas... Eu tenho uma variável chamada TEST que é setada na
>     inicialização do serviço usando "-t", o getopt pega esta informação e
>     torna o TEST true ou false, isto está no main; eu gostaria de
>     testá-la
>     no ponto inicial deste módulo assim :
>
>     if ($main::TEST){
>        $gsubmission_url='http://url/de/testes';
>        $gretrieval_url=' http://url/de/testes/RetrieveListenerServlet';
>        $glogin='LOGIN';
>        $gpass='PASS';
>     }
>     else{
>        $gsubmission_url='http://url/live';
>        $gretrieval_url=' http://url/live/RetrieveListenerServlet';
>        $glogin='LOGIN_OFICIAL';
>        $gpass='SENHA_OFICIAL';
>     }
>
>         Mas eu não estou conseguindo, ele sempre entra no else por que
>     o main::TEST
>     não existe neste ponto (inicio do módulo), eu utilizo o "strict" e
>     o "-w" na inicialização do serviço, no entanto nenhum erro é
>     reportado. Se eu coloco em qualquer das subs do módulo funciona, e é
>     como está por hora.  :(
>         Alguém poderia me ajudar ?
>         Desde já muito obrigado.
>
>
>
>
>
>
>
>     _______________________________________________________
>     Yahoo! doce lar. Faça do Yahoo! sua homepage.
>     http://br.yahoo.com/homepageset.html
>
>     _______________________________________________
>     Cascavel-pm mailing list
>     Cascavel-pm em pm.org <mailto:Cascavel-pm em pm.org>
>     http://mail.pm.org/mailman/listinfo/cascavel-pm
>
>
>
>
> -- 
> Igor Sutton Lopes
> http://www.izut.com/
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Cascavel-pm mailing list
>Cascavel-pm em pm.org
>http://mail.pm.org/mailman/listinfo/cascavel-pm
>


-- 
|---------------------------------------------.---.-\
| Daniel R. Antunes (Profiss. de informática) )\-/( |
| ...... www.daniel-antunes.com.br (Web Site) (OvO) |
| ... danielrantunes em sorria.com.br (M$Nmsger) (( )) |
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"~"~~|
| ICQº 107888741 ~ GNU/Linuxº 238553 ~ GotNiX 'ÜÜÜ' |
\---------------------------------------------------|


		
_______________________________________________________ 
Yahoo! Acesso Grátis - Internet rápida e grátis. Instale 
o discador agora! 
http://br.acesso.yahoo.com


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