From capmostarda em gmail.com Mon Dec 6 20:39:54 2010 From: capmostarda em gmail.com (Tom Mostard) Date: Tue, 7 Dec 2010 01:39:54 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= Message-ID: Colegas, Alguém sabe como carregar uma classe que não foi carregada com "use" através de reflexão computacional? Sei que Perl suporta, mas não estou conseguindo implementar. Exemplo: my $class = "Foo"; my $method = "hello"; my $object = $class->new(); $object->$method(); // que e o mesmo que $object->hello(); Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm Preciso usar o EXPORT ou coisa assim? O erro que tenho é o seguinte: Can't locate object method "new" via package "Foo" (perhaps you forgot to load "Foo"?) at ./main.pl line 10. Mas se eu uso o "use Foo" funciona. Abraços, Tom -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From mantovani em perl.org.br Mon Dec 6 21:28:55 2010 From: mantovani em perl.org.br (Daniel de Oliveira Mantovani) Date: Tue, 7 Dec 2010 03:28:55 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: 2010/12/7 Tom Mostard : > Colegas, > > Alguém sabe como carregar uma classe que não foi carregada com "use" através > de reflexão computacional? package Foo; sub new { return bless {}, shift } sub method { my $self = shift; print "Work!\n" } 1; package main; my ( $class, $method ) = ( 'Foo', 'method' ); $class->new->$method; __END__ Outro exemplo, http://nopaste.snit.ch/26735 > Sei que Perl suporta, mas não estou conseguindo implementar. > > Exemplo: > > my $class  = "Foo"; > my $method = "hello"; > my $object = $class->new(); > $object->$method(); // que e o mesmo que $object->hello(); > > Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > Preciso usar o EXPORT ou coisa assim? Não, você não precisa do Export. Você pode usar "do" ou "require". package main; use strict; use warnings; my %cm = (qw/Foo read Bar people Baz should/); foreach my $class ( ( sort keys %cm ) ) { require $class; my $method = $cm{$class}; $class->new->$method; } Uma das utilidades do "require", é quando você precisa carregar um módulo em tempo de execução, que é o seu caso. Na verdade, tanto "use" como "require" usam o "do". Ambos são uma abstração. http://perldoc.perl.org/functions/do.html > > O erro que tenho é o seguinte: > > Can't locate object method "new" via package "Foo" (perhaps you forgot to > load "Foo"?) at ./main.pl line 10. > > Mas se eu uso o "use Foo" funciona. > > Abraços, > > Tom > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From mantovani em perl.org.br Mon Dec 6 21:34:28 2010 From: mantovani em perl.org.br (Daniel de Oliveira Mantovani) Date: Tue, 7 Dec 2010 03:34:28 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão e introspecção: use Some::Class; use Class::MOP; my $meta = Class::MOP::Class->initialize('Some::Class'); for my $meth ( $meta->get_all_methods ) { print $meth->fully_qualified_name, "\n": } 2010/12/7 Daniel de Oliveira Mantovani : > 2010/12/7 Tom Mostard : >> Colegas, >> >> Alguém sabe como carregar uma classe que não foi carregada com "use" através >> de reflexão computacional? > > package Foo; > > sub new { return bless {}, shift } > sub method { my $self = shift; print "Work!\n" } > > 1; > > package main; > > my ( $class, $method ) = ( 'Foo', 'method' ); > $class->new->$method; > > > __END__ > > > Outro exemplo, http://nopaste.snit.ch/26735 > >> Sei que Perl suporta, mas não estou conseguindo implementar. >> >> Exemplo: >> >> my $class  = "Foo"; >> my $method = "hello"; >> my $object = $class->new(); >> $object->$method(); // que e o mesmo que $object->hello(); >> >> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm >> Preciso usar o EXPORT ou coisa assim? > > Não, você não precisa do Export. Você pode usar "do" ou  "require". > > package main; > use strict; > use warnings; > > my %cm = (qw/Foo read Bar people Baz should/); > > foreach my $class ( ( sort keys %cm ) ) { > >    require $class; >    my $method = $cm{$class}; > >    $class->new->$method; > > } > > Uma das utilidades do "require", é quando você precisa carregar um > módulo em tempo de execução, que é o seu caso. > Na verdade, tanto "use" como "require" usam o "do". Ambos são uma abstração. > http://perldoc.perl.org/functions/do.html > > > >> >> O erro que tenho é o seguinte: >> >> Can't locate object method "new" via package "Foo" (perhaps you forgot to >> load "Foo"?) at ./main.pl line 10. >> >> Mas se eu uso o "use Foo" funciona. >> >> Abraços, >> >> Tom >> _______________________________________________ >> Cascavel-pm mailing list >> Cascavel-pm em pm.org >> http://mail.pm.org/mailman/listinfo/cascavel-pm >> > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From mantovani em perl.org.br Mon Dec 6 21:36:10 2010 From: mantovani em perl.org.br (Daniel de Oliveira Mantovani) Date: Tue, 7 Dec 2010 03:36:10 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Ops, esqueci de colocar o link do manual do Moose, http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod Só para ficar mais claro, você pode usar toda a magia do Moose e ainda abusar de reflexão e introspecção, com Class::Mop. 2010/12/7 Daniel de Oliveira Mantovani : > Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão > e introspecção: > > use Some::Class; > use Class::MOP; > > my $meta = Class::MOP::Class->initialize('Some::Class'); > > for my $meth ( $meta->get_all_methods ) { >    print $meth->fully_qualified_name, "\n": > } > > > 2010/12/7 Daniel de Oliveira Mantovani : >> 2010/12/7 Tom Mostard : >>> Colegas, >>> >>> Alguém sabe como carregar uma classe que não foi carregada com "use" através >>> de reflexão computacional? >> >> package Foo; >> >> sub new { return bless {}, shift } >> sub method { my $self = shift; print "Work!\n" } >> >> 1; >> >> package main; >> >> my ( $class, $method ) = ( 'Foo', 'method' ); >> $class->new->$method; >> >> >> __END__ >> >> >> Outro exemplo, http://nopaste.snit.ch/26735 >> >>> Sei que Perl suporta, mas não estou conseguindo implementar. >>> >>> Exemplo: >>> >>> my $class  = "Foo"; >>> my $method = "hello"; >>> my $object = $class->new(); >>> $object->$method(); // que e o mesmo que $object->hello(); >>> >>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm >>> Preciso usar o EXPORT ou coisa assim? >> >> Não, você não precisa do Export. Você pode usar "do" ou  "require". >> >> package main; >> use strict; >> use warnings; >> >> my %cm = (qw/Foo read Bar people Baz should/); >> >> foreach my $class ( ( sort keys %cm ) ) { >> >>    require $class; >>    my $method = $cm{$class}; >> >>    $class->new->$method; >> >> } >> >> Uma das utilidades do "require", é quando você precisa carregar um >> módulo em tempo de execução, que é o seu caso. >> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma abstração. >> http://perldoc.perl.org/functions/do.html >> >> >> >>> >>> O erro que tenho é o seguinte: >>> >>> Can't locate object method "new" via package "Foo" (perhaps you forgot to >>> load "Foo"?) at ./main.pl line 10. >>> >>> Mas se eu uso o "use Foo" funciona. >>> >>> Abraços, >>> >>> Tom >>> _______________________________________________ >>> Cascavel-pm mailing list >>> Cascavel-pm em pm.org >>> http://mail.pm.org/mailman/listinfo/cascavel-pm >>> >> >> >> >> -- >> "If you?ve never written anything thoughtful, then you?ve never had >> any difficult, important, or interesting thoughts. That?s the secret: >> people who don?t write, are people who don?t think." >> > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From mantovani em perl.org.br Mon Dec 6 21:38:00 2010 From: mantovani em perl.org.br (Daniel de Oliveira Mantovani) Date: Tue, 7 Dec 2010 03:38:00 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou deixar só a última recomendação, http://en.wikipedia.org/wiki/Metaprogramming Eu gostaria de falar muito mais sobre reflexão e introspecção, mas preciso trabalhar. Boa noite. 2010/12/7 Daniel de Oliveira Mantovani : > Ops, esqueci de colocar o link do manual do Moose, > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda > abusar de reflexão e introspecção, com Class::Mop. > > 2010/12/7 Daniel de Oliveira Mantovani : >> Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão >> e introspecção: >> >> use Some::Class; >> use Class::MOP; >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); >> >> for my $meth ( $meta->get_all_methods ) { >>    print $meth->fully_qualified_name, "\n": >> } >> >> >> 2010/12/7 Daniel de Oliveira Mantovani : >>> 2010/12/7 Tom Mostard : >>>> Colegas, >>>> >>>> Alguém sabe como carregar uma classe que não foi carregada com "use" através >>>> de reflexão computacional? >>> >>> package Foo; >>> >>> sub new { return bless {}, shift } >>> sub method { my $self = shift; print "Work!\n" } >>> >>> 1; >>> >>> package main; >>> >>> my ( $class, $method ) = ( 'Foo', 'method' ); >>> $class->new->$method; >>> >>> >>> __END__ >>> >>> >>> Outro exemplo, http://nopaste.snit.ch/26735 >>> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. >>>> >>>> Exemplo: >>>> >>>> my $class  = "Foo"; >>>> my $method = "hello"; >>>> my $object = $class->new(); >>>> $object->$method(); // que e o mesmo que $object->hello(); >>>> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm >>>> Preciso usar o EXPORT ou coisa assim? >>> >>> Não, você não precisa do Export. Você pode usar "do" ou  "require". >>> >>> package main; >>> use strict; >>> use warnings; >>> >>> my %cm = (qw/Foo read Bar people Baz should/); >>> >>> foreach my $class ( ( sort keys %cm ) ) { >>> >>>    require $class; >>>    my $method = $cm{$class}; >>> >>>    $class->new->$method; >>> >>> } >>> >>> Uma das utilidades do "require", é quando você precisa carregar um >>> módulo em tempo de execução, que é o seu caso. >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma abstração. >>> http://perldoc.perl.org/functions/do.html >>> >>> >>> >>>> >>>> O erro que tenho é o seguinte: >>>> >>>> Can't locate object method "new" via package "Foo" (perhaps you forgot to >>>> load "Foo"?) at ./main.pl line 10. >>>> >>>> Mas se eu uso o "use Foo" funciona. >>>> >>>> Abraços, >>>> >>>> Tom >>>> _______________________________________________ >>>> Cascavel-pm mailing list >>>> Cascavel-pm em pm.org >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm >>>> >>> >>> >>> >>> -- >>> "If you?ve never written anything thoughtful, then you?ve never had >>> any difficult, important, or interesting thoughts. That?s the secret: >>> people who don?t write, are people who don?t think." >>> >> >> >> >> -- >> "If you?ve never written anything thoughtful, then you?ve never had >> any difficult, important, or interesting thoughts. That?s the secret: >> people who don?t write, are people who don?t think." >> > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From capmostarda em gmail.com Tue Dec 7 09:58:16 2010 From: capmostarda em gmail.com (Tom Mostard) Date: Tue, 7 Dec 2010 14:58:16 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Daniel, Obrigado pela ajuda! Mas aqui continuar sem solução. package Foo; sub new { return bless {}, shift } sub method { my $self = shift; print "Work!\n" } 1; package main; my ( $class, $method ) = ( 'Foo', 'method' ); # require $class; $class->new->$method; Quando uso o require acima, tenho a seguinte mensagem: Can't locate Foo in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at ./main.pl line 6. Se eu comento o "require", tenho a seguinte mensagem: Can't locate object method "new" via package "Foo" (perhaps you forgot to load "Foo"?) at ./main.pl line 7. Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem o Moose. Queria resolver isso sem usá-los, se for possível. Se uso as duas classes num único arquivo, funciona, mas minha intenção é usar uma classe externa, que pode variar conforme a necessidade. Mais uma vez, obrigado. Tom Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani < mantovani em perl.org.br> escreveu: > Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > deixar só a última recomendação, > http://en.wikipedia.org/wiki/Metaprogramming > > Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > preciso trabalhar. > > Boa noite. > > 2010/12/7 Daniel de Oliveira Mantovani : > > Ops, esqueci de colocar o link do manual do Moose, > > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > > > > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda > > abusar de reflexão e introspecção, com Class::Mop. > > > > 2010/12/7 Daniel de Oliveira Mantovani : > >> Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão > >> e introspecção: > >> > >> use Some::Class; > >> use Class::MOP; > >> > >> my $meta = Class::MOP::Class->initialize('Some::Class'); > >> > >> for my $meth ( $meta->get_all_methods ) { > >> print $meth->fully_qualified_name, "\n": > >> } > >> > >> > >> 2010/12/7 Daniel de Oliveira Mantovani : > >>> 2010/12/7 Tom Mostard : > >>>> Colegas, > >>>> > >>>> Alguém sabe como carregar uma classe que não foi carregada com "use" > através > >>>> de reflexão computacional? > >>> > >>> package Foo; > >>> > >>> sub new { return bless {}, shift } > >>> sub method { my $self = shift; print "Work!\n" } > >>> > >>> 1; > >>> > >>> package main; > >>> > >>> my ( $class, $method ) = ( 'Foo', 'method' ); > >>> $class->new->$method; > >>> > >>> > >>> __END__ > >>> > >>> > >>> Outro exemplo, http://nopaste.snit.ch/26735 > >>> > >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > >>>> > >>>> Exemplo: > >>>> > >>>> my $class = "Foo"; > >>>> my $method = "hello"; > >>>> my $object = $class->new(); > >>>> $object->$method(); // que e o mesmo que $object->hello(); > >>>> > >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > >>>> Preciso usar o EXPORT ou coisa assim? > >>> > >>> Não, você não precisa do Export. Você pode usar "do" ou "require". > >>> > >>> package main; > >>> use strict; > >>> use warnings; > >>> > >>> my %cm = (qw/Foo read Bar people Baz should/); > >>> > >>> foreach my $class ( ( sort keys %cm ) ) { > >>> > >>> require $class; > >>> my $method = $cm{$class}; > >>> > >>> $class->new->$method; > >>> > >>> } > >>> > >>> Uma das utilidades do "require", é quando você precisa carregar um > >>> módulo em tempo de execução, que é o seu caso. > >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > abstração. > >>> http://perldoc.perl.org/functions/do.html > >>> > >>> > >>> > >>>> > >>>> O erro que tenho é o seguinte: > >>>> > >>>> Can't locate object method "new" via package "Foo" (perhaps you forgot > to > >>>> load "Foo"?) at ./main.pl line 10. > >>>> > >>>> Mas se eu uso o "use Foo" funciona. > >>>> > >>>> Abraços, > >>>> > >>>> Tom > >>>> _______________________________________________ > >>>> Cascavel-pm mailing list > >>>> Cascavel-pm em pm.org > >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > >>>> > >>> > >>> > >>> > >>> -- > >>> "If you?ve never written anything thoughtful, then you?ve never had > >>> any difficult, important, or interesting thoughts. That?s the secret: > >>> people who don?t write, are people who don?t think." > >>> > >> > >> > >> > >> -- > >> "If you?ve never written anything thoughtful, then you?ve never had > >> any difficult, important, or interesting thoughts. That?s the secret: > >> people who don?t write, are people who don?t think." > >> > > > > > > > > -- > > "If you?ve never written anything thoughtful, then you?ve never had > > any difficult, important, or interesting thoughts. That?s the secret: > > people who don?t write, are people who don?t think." > > > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From mantovani em perl.org.br Tue Dec 7 10:02:47 2010 From: mantovani em perl.org.br (Daniel de Oliveira Mantovani) Date: Tue, 7 Dec 2010 16:02:47 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que está fazendo o require ? 2010/12/7 Tom Mostard : > > Daniel, > Obrigado pela ajuda! Mas aqui continuar sem solução. > > package Foo; > > sub new { return bless {}, shift } > sub method { my $self = shift; print "Work!\n" } > > 1; > > > package main; > > my ( $class, $method ) = ( 'Foo', 'method' ); > # require $class; > $class->new->$method; > > > Quando uso o require acima, tenho a seguinte mensagem: > Can't locate Foo in @INC (@INC contains: /etc/perl > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > /usr/local/lib/site_perl .) at ./main.pl line 6. > > Se eu comento o "require", tenho a seguinte mensagem: > Can't locate object method "new" via package "Foo" (perhaps you forgot to > load "Foo"?) at ./main.pl line 7. > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem o > Moose. Queria resolver isso sem usá-los, se for possível. > Se uso as duas classes num único arquivo, funciona, mas minha intenção é > usar uma classe externa, que pode variar conforme a necessidade. > > Mais uma vez, obrigado. > > Tom > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > escreveu: >> >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou >> deixar só a última recomendação, >> http://en.wikipedia.org/wiki/Metaprogramming >> >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas >> preciso trabalhar. >> >> Boa noite. >> >> 2010/12/7 Daniel de Oliveira Mantovani : >> > Ops, esqueci de colocar o link do manual do Moose, >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod >> > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda >> > abusar de reflexão e introspecção, com Class::Mop. >> > >> > 2010/12/7 Daniel de Oliveira Mantovani : >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão >> >> e introspecção: >> >> >> >> use Some::Class; >> >> use Class::MOP; >> >> >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); >> >> >> >> for my $meth ( $meta->get_all_methods ) { >> >>    print $meth->fully_qualified_name, "\n": >> >> } >> >> >> >> >> >> 2010/12/7 Daniel de Oliveira Mantovani : >> >>> 2010/12/7 Tom Mostard : >> >>>> Colegas, >> >>>> >> >>>> Alguém sabe como carregar uma classe que não foi carregada com "use" >> >>>> através >> >>>> de reflexão computacional? >> >>> >> >>> package Foo; >> >>> >> >>> sub new { return bless {}, shift } >> >>> sub method { my $self = shift; print "Work!\n" } >> >>> >> >>> 1; >> >>> >> >>> package main; >> >>> >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); >> >>> $class->new->$method; >> >>> >> >>> >> >>> __END__ >> >>> >> >>> >> >>> Outro exemplo, http://nopaste.snit.ch/26735 >> >>> >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. >> >>>> >> >>>> Exemplo: >> >>>> >> >>>> my $class  = "Foo"; >> >>>> my $method = "hello"; >> >>>> my $object = $class->new(); >> >>>> $object->$method(); // que e o mesmo que $object->hello(); >> >>>> >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm >> >>>> Preciso usar o EXPORT ou coisa assim? >> >>> >> >>> Não, você não precisa do Export. Você pode usar "do" ou  "require". >> >>> >> >>> package main; >> >>> use strict; >> >>> use warnings; >> >>> >> >>> my %cm = (qw/Foo read Bar people Baz should/); >> >>> >> >>> foreach my $class ( ( sort keys %cm ) ) { >> >>> >> >>>    require $class; >> >>>    my $method = $cm{$class}; >> >>> >> >>>    $class->new->$method; >> >>> >> >>> } >> >>> >> >>> Uma das utilidades do "require", é quando você precisa carregar um >> >>> módulo em tempo de execução, que é o seu caso. >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma >> >>> abstração. >> >>> http://perldoc.perl.org/functions/do.html >> >>> >> >>> >> >>> >> >>>> >> >>>> O erro que tenho é o seguinte: >> >>>> >> >>>> Can't locate object method "new" via package "Foo" (perhaps you >> >>>> forgot to >> >>>> load "Foo"?) at ./main.pl line 10. >> >>>> >> >>>> Mas se eu uso o "use Foo" funciona. >> >>>> >> >>>> Abraços, >> >>>> >> >>>> Tom >> >>>> _______________________________________________ >> >>>> Cascavel-pm mailing list >> >>>> Cascavel-pm em pm.org >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm >> >>>> >> >>> >> >>> >> >>> >> >>> -- >> >>> "If you?ve never written anything thoughtful, then you?ve never had >> >>> any difficult, important, or interesting thoughts. That?s the secret: >> >>> people who don?t write, are people who don?t think." >> >>> >> >> >> >> >> >> >> >> -- >> >> "If you?ve never written anything thoughtful, then you?ve never had >> >> any difficult, important, or interesting thoughts. That?s the secret: >> >> people who don?t write, are people who don?t think." >> >> >> > >> > >> > >> > -- >> > "If you?ve never written anything thoughtful, then you?ve never had >> > any difficult, important, or interesting thoughts. That?s the secret: >> > people who don?t write, are people who don?t think." >> > >> >> >> >> -- >> "If you?ve never written anything thoughtful, then you?ve never had >> any difficult, important, or interesting thoughts. That?s the secret: >> people who don?t write, are people who don?t think." >> _______________________________________________ >> Cascavel-pm mailing list >> Cascavel-pm em pm.org >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- "If you?ve never written anything thoughtful, then you?ve never had any difficult, important, or interesting thoughts. That?s the secret: people who don?t write, are people who don?t think." From daniel-vinciguerra em hotmail.com Tue Dec 7 10:05:54 2010 From: daniel-vinciguerra em hotmail.com (Daniel Vinciguerra) Date: Tue, 7 Dec 2010 16:05:54 -0200 Subject: [Cascavel-pm] =?windows-1252?q?Reflex=E3o_em_Perl?= In-Reply-To: References: , , , , , , Message-ID: coloque o seguinte no seu código... use lib '/path/para/diretório/arquivos/.pm'; ... e descomente o require.Acredito que isso deve funcionar. Ua, Daniel Vinciguerra - Developer http://github.com/dvinciguerra > Date: Tue, 7 Dec 2010 16:02:47 -0200 > From: mantovani em perl.org.br > To: cascavel-pm em pm.org > Subject: Re: [Cascavel-pm] Reflexão em Perl > > Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que > está fazendo o require ? > > 2010/12/7 Tom Mostard : > > > > Daniel, > > Obrigado pela ajuda! Mas aqui continuar sem solução. > > > > package Foo; > > > > sub new { return bless {}, shift } > > sub method { my $self = shift; print "Work!\n" } > > > > 1; > > > > > > package main; > > > > my ( $class, $method ) = ( 'Foo', 'method' ); > > # require $class; > > $class->new->$method; > > > > > > Quando uso o require acima, tenho a seguinte mensagem: > > Can't locate Foo in @INC (@INC contains: /etc/perl > > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > > /usr/local/lib/site_perl .) at ./main.pl line 6. > > > > Se eu comento o "require", tenho a seguinte mensagem: > > Can't locate object method "new" via package "Foo" (perhaps you forgot to > > load "Foo"?) at ./main.pl line 7. > > > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem o > > Moose. Queria resolver isso sem usá-los, se for possível. > > Se uso as duas classes num único arquivo, funciona, mas minha intenção é > > usar uma classe externa, que pode variar conforme a necessidade. > > > > Mais uma vez, obrigado. > > > > Tom > > > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > > escreveu: > >> > >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > >> deixar só a última recomendação, > >> http://en.wikipedia.org/wiki/Metaprogramming > >> > >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > >> preciso trabalhar. > >> > >> Boa noite. > >> > >> 2010/12/7 Daniel de Oliveira Mantovani : > >> > Ops, esqueci de colocar o link do manual do Moose, > >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > >> > > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda > >> > abusar de reflexão e introspecção, com Class::Mop. > >> > > >> > 2010/12/7 Daniel de Oliveira Mantovani : > >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão > >> >> e introspecção: > >> >> > >> >> use Some::Class; > >> >> use Class::MOP; > >> >> > >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); > >> >> > >> >> for my $meth ( $meta->get_all_methods ) { > >> >> print $meth->fully_qualified_name, "\n": > >> >> } > >> >> > >> >> > >> >> 2010/12/7 Daniel de Oliveira Mantovani : > >> >>> 2010/12/7 Tom Mostard : > >> >>>> Colegas, > >> >>>> > >> >>>> Alguém sabe como carregar uma classe que não foi carregada com "use" > >> >>>> através > >> >>>> de reflexão computacional? > >> >>> > >> >>> package Foo; > >> >>> > >> >>> sub new { return bless {}, shift } > >> >>> sub method { my $self = shift; print "Work!\n" } > >> >>> > >> >>> 1; > >> >>> > >> >>> package main; > >> >>> > >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); > >> >>> $class->new->$method; > >> >>> > >> >>> > >> >>> __END__ > >> >>> > >> >>> > >> >>> Outro exemplo, http://nopaste.snit.ch/26735 > >> >>> > >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > >> >>>> > >> >>>> Exemplo: > >> >>>> > >> >>>> my $class = "Foo"; > >> >>>> my $method = "hello"; > >> >>>> my $object = $class->new(); > >> >>>> $object->$method(); // que e o mesmo que $object->hello(); > >> >>>> > >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > >> >>>> Preciso usar o EXPORT ou coisa assim? > >> >>> > >> >>> Não, você não precisa do Export. Você pode usar "do" ou "require". > >> >>> > >> >>> package main; > >> >>> use strict; > >> >>> use warnings; > >> >>> > >> >>> my %cm = (qw/Foo read Bar people Baz should/); > >> >>> > >> >>> foreach my $class ( ( sort keys %cm ) ) { > >> >>> > >> >>> require $class; > >> >>> my $method = $cm{$class}; > >> >>> > >> >>> $class->new->$method; > >> >>> > >> >>> } > >> >>> > >> >>> Uma das utilidades do "require", é quando você precisa carregar um > >> >>> módulo em tempo de execução, que é o seu caso. > >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > >> >>> abstração. > >> >>> http://perldoc.perl.org/functions/do.html > >> >>> > >> >>> > >> >>> > >> >>>> > >> >>>> O erro que tenho é o seguinte: > >> >>>> > >> >>>> Can't locate object method "new" via package "Foo" (perhaps you > >> >>>> forgot to > >> >>>> load "Foo"?) at ./main.pl line 10. > >> >>>> > >> >>>> Mas se eu uso o "use Foo" funciona. > >> >>>> > >> >>>> Abraços, > >> >>>> > >> >>>> Tom > >> >>>> _______________________________________________ > >> >>>> Cascavel-pm mailing list > >> >>>> Cascavel-pm em pm.org > >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > >> >>>> > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> "If you?ve never written anything thoughtful, then you?ve never had > >> >>> any difficult, important, or interesting thoughts. That?s the secret: > >> >>> people who don?t write, are people who don?t think." > >> >>> > >> >> > >> >> > >> >> > >> >> -- > >> >> "If you?ve never written anything thoughtful, then you?ve never had > >> >> any difficult, important, or interesting thoughts. That?s the secret: > >> >> people who don?t write, are people who don?t think." > >> >> > >> > > >> > > >> > > >> > -- > >> > "If you?ve never written anything thoughtful, then you?ve never had > >> > any difficult, important, or interesting thoughts. That?s the secret: > >> > people who don?t write, are people who don?t think." > >> > > >> > >> > >> > >> -- > >> "If you?ve never written anything thoughtful, then you?ve never had > >> any difficult, important, or interesting thoughts. That?s the secret: > >> people who don?t write, are people who don?t think." > >> _______________________________________________ > >> Cascavel-pm mailing list > >> Cascavel-pm em pm.org > >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From capmostarda em gmail.com Tue Dec 7 10:11:35 2010 From: capmostarda em gmail.com (Tom Mostard) Date: Tue, 7 Dec 2010 15:11:35 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Isso mesmo. Em 7 de dezembro de 2010 15:02, Daniel de Oliveira Mantovani < mantovani em perl.org.br> escreveu: > Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que > está fazendo o require ? > > 2010/12/7 Tom Mostard : > > > > Daniel, > > Obrigado pela ajuda! Mas aqui continuar sem solução. > > > > package Foo; > > > > sub new { return bless {}, shift } > > sub method { my $self = shift; print "Work!\n" } > > > > 1; > > > > > > package main; > > > > my ( $class, $method ) = ( 'Foo', 'method' ); > > # require $class; > > $class->new->$method; > > > > > > Quando uso o require acima, tenho a seguinte mensagem: > > Can't locate Foo in @INC (@INC contains: /etc/perl > > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > > /usr/local/lib/site_perl .) at ./main.pl line 6. > > > > Se eu comento o "require", tenho a seguinte mensagem: > > Can't locate object method "new" via package "Foo" (perhaps you forgot to > > load "Foo"?) at ./main.pl line 7. > > > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem > o > > Moose. Queria resolver isso sem usá-los, se for possível. > > Se uso as duas classes num único arquivo, funciona, mas minha intenção é > > usar uma classe externa, que pode variar conforme a necessidade. > > > > Mais uma vez, obrigado. > > > > Tom > > > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > > escreveu: > >> > >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > >> deixar só a última recomendação, > >> http://en.wikipedia.org/wiki/Metaprogramming > >> > >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > >> preciso trabalhar. > >> > >> Boa noite. > >> > >> 2010/12/7 Daniel de Oliveira Mantovani : > >> > Ops, esqueci de colocar o link do manual do Moose, > >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > >> > > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda > >> > abusar de reflexão e introspecção, com Class::Mop. > >> > > >> > 2010/12/7 Daniel de Oliveira Mantovani : > >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de > reflexão > >> >> e introspecção: > >> >> > >> >> use Some::Class; > >> >> use Class::MOP; > >> >> > >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); > >> >> > >> >> for my $meth ( $meta->get_all_methods ) { > >> >> print $meth->fully_qualified_name, "\n": > >> >> } > >> >> > >> >> > >> >> 2010/12/7 Daniel de Oliveira Mantovani : > >> >>> 2010/12/7 Tom Mostard : > >> >>>> Colegas, > >> >>>> > >> >>>> Alguém sabe como carregar uma classe que não foi carregada com > "use" > >> >>>> através > >> >>>> de reflexão computacional? > >> >>> > >> >>> package Foo; > >> >>> > >> >>> sub new { return bless {}, shift } > >> >>> sub method { my $self = shift; print "Work!\n" } > >> >>> > >> >>> 1; > >> >>> > >> >>> package main; > >> >>> > >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); > >> >>> $class->new->$method; > >> >>> > >> >>> > >> >>> __END__ > >> >>> > >> >>> > >> >>> Outro exemplo, http://nopaste.snit.ch/26735 > >> >>> > >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > >> >>>> > >> >>>> Exemplo: > >> >>>> > >> >>>> my $class = "Foo"; > >> >>>> my $method = "hello"; > >> >>>> my $object = $class->new(); > >> >>>> $object->$method(); // que e o mesmo que $object->hello(); > >> >>>> > >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > >> >>>> Preciso usar o EXPORT ou coisa assim? > >> >>> > >> >>> Não, você não precisa do Export. Você pode usar "do" ou "require". > >> >>> > >> >>> package main; > >> >>> use strict; > >> >>> use warnings; > >> >>> > >> >>> my %cm = (qw/Foo read Bar people Baz should/); > >> >>> > >> >>> foreach my $class ( ( sort keys %cm ) ) { > >> >>> > >> >>> require $class; > >> >>> my $method = $cm{$class}; > >> >>> > >> >>> $class->new->$method; > >> >>> > >> >>> } > >> >>> > >> >>> Uma das utilidades do "require", é quando você precisa carregar um > >> >>> módulo em tempo de execução, que é o seu caso. > >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > >> >>> abstração. > >> >>> http://perldoc.perl.org/functions/do.html > >> >>> > >> >>> > >> >>> > >> >>>> > >> >>>> O erro que tenho é o seguinte: > >> >>>> > >> >>>> Can't locate object method "new" via package "Foo" (perhaps you > >> >>>> forgot to > >> >>>> load "Foo"?) at ./main.pl line 10. > >> >>>> > >> >>>> Mas se eu uso o "use Foo" funciona. > >> >>>> > >> >>>> Abraços, > >> >>>> > >> >>>> Tom > >> >>>> _______________________________________________ > >> >>>> Cascavel-pm mailing list > >> >>>> Cascavel-pm em pm.org > >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > >> >>>> > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> "If you?ve never written anything thoughtful, then you?ve never had > >> >>> any difficult, important, or interesting thoughts. That?s the > secret: > >> >>> people who don?t write, are people who don?t think." > >> >>> > >> >> > >> >> > >> >> > >> >> -- > >> >> "If you?ve never written anything thoughtful, then you?ve never had > >> >> any difficult, important, or interesting thoughts. That?s the secret: > >> >> people who don?t write, are people who don?t think." > >> >> > >> > > >> > > >> > > >> > -- > >> > "If you?ve never written anything thoughtful, then you?ve never had > >> > any difficult, important, or interesting thoughts. That?s the secret: > >> > people who don?t write, are people who don?t think." > >> > > >> > >> > >> > >> -- > >> "If you?ve never written anything thoughtful, then you?ve never had > >> any difficult, important, or interesting thoughts. That?s the secret: > >> people who don?t write, are people who don?t think." > >> _______________________________________________ > >> Cascavel-pm mailing list > >> Cascavel-pm em pm.org > >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From capmostarda em gmail.com Tue Dec 7 10:15:01 2010 From: capmostarda em gmail.com (Tom Mostard) Date: Tue, 7 Dec 2010 15:15:01 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Também nada, Daniel... Tá tudo no mesmo diretório. Todos arquivos com permissão total, só para teste. E mesmo assim nada. Abraços 2010/12/7 Daniel Vinciguerra > > coloque o seguinte no seu código... > > use lib '/path/para/diretório/arquivos/.pm'; > > ... e descomente o require. > Acredito que isso deve funcionar. > > Ua, > > Daniel Vinciguerra - Developer > http://github.com/dvinciguerra > > > > > > > Date: Tue, 7 Dec 2010 16:02:47 -0200 > > From: mantovani em perl.org.br > > To: cascavel-pm em pm.org > > Subject: Re: [Cascavel-pm] Reflexão em Perl > > > > > Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que > > está fazendo o require ? > > > > 2010/12/7 Tom Mostard : > > > > > > Daniel, > > > Obrigado pela ajuda! Mas aqui continuar sem solução. > > > > > > package Foo; > > > > > > sub new { return bless {}, shift } > > > sub method { my $self = shift; print "Work!\n" } > > > > > > 1; > > > > > > > > > package main; > > > > > > my ( $class, $method ) = ( 'Foo', 'method' ); > > > # require $class; > > > $class->new->$method; > > > > > > > > > Quando uso o require acima, tenho a seguinte mensagem: > > > Can't locate Foo in @INC (@INC contains: /etc/perl > > > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > > > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > > > /usr/local/lib/site_perl .) at ./main.pl line 6. > > > > > > Se eu comento o "require", tenho a seguinte mensagem: > > > Can't locate object method "new" via package "Foo" (perhaps you forgot > to > > > load "Foo"?) at ./main.pl line 7. > > > > > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP > nem o > > > Moose. Queria resolver isso sem usá-los, se for possível. > > > Se uso as duas classes num único arquivo, funciona, mas minha intenção > é > > > usar uma classe externa, que pode variar conforme a necessidade. > > > > > > Mais uma vez, obrigado. > > > > > > Tom > > > > > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > > > escreveu: > > >> > > >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > > >> deixar só a última recomendação, > > >> http://en.wikipedia.org/wiki/Metaprogramming > > >> > > >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > > >> preciso trabalhar. > > >> > > >> Boa noite. > > >> > > >> 2010/12/7 Daniel de Oliveira Mantovani : > > >> > Ops, esqueci de colocar o link do manual do Moose, > > >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > > >> > > > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e > ainda > > >> > abusar de reflexão e introspecção, com Class::Mop. > > >> > > > >> > 2010/12/7 Daniel de Oliveira Mantovani : > > >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de > reflexão > > >> >> e introspecção: > > >> >> > > >> >> use Some::Class; > > >> >> use Class::MOP; > > >> >> > > >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); > > >> >> > > >> >> for my $meth ( $meta->get_all_methods ) { > > >> >> print $meth->fully_qualified_name, "\n": > > >> >> } > > >> >> > > >> >> > > >> >> 2010/12/7 Daniel de Oliveira Mantovani : > > >> >>> 2010/12/7 Tom Mostard : > > >> >>>> Colegas, > > >> >>>> > > >> >>>> Alguém sabe como carregar uma classe que não foi carregada com > "use" > > >> >>>> através > > >> >>>> de reflexão computacional? > > >> >>> > > >> >>> package Foo; > > >> >>> > > >> >>> sub new { return bless {}, shift } > > >> >>> sub method { my $self = shift; print "Work!\n" } > > >> >>> > > >> >>> 1; > > >> >>> > > >> >>> package main; > > >> >>> > > >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); > > >> >>> $class->new->$method; > > >> >>> > > >> >>> > > >> >>> __END__ > > >> >>> > > >> >>> > > >> >>> Outro exemplo, http://nopaste.snit.ch/26735 > > >> >>> > > >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > > >> >>>> > > >> >>>> Exemplo: > > >> >>>> > > >> >>>> my $class = "Foo"; > > >> >>>> my $method = "hello"; > > >> >>>> my $object = $class->new(); > > >> >>>> $object->$method(); // que e o mesmo que $object->hello(); > > >> >>>> > > >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > > >> >>>> Preciso usar o EXPORT ou coisa assim? > > >> >>> > > >> >>> Não, você não precisa do Export. Você pode usar "do" ou > "require". > > >> >>> > > >> >>> package main; > > >> >>> use strict; > > >> >>> use warnings; > > >> >>> > > >> >>> my %cm = (qw/Foo read Bar people Baz should/); > > >> >>> > > >> >>> foreach my $class ( ( sort keys %cm ) ) { > > >> >>> > > >> >>> require $class; > > >> >>> my $method = $cm{$class}; > > >> >>> > > >> >>> $class->new->$method; > > >> >>> > > >> >>> } > > >> >>> > > >> >>> Uma das utilidades do "require", é quando você precisa carregar um > > >> >>> módulo em tempo de execução, que é o seu caso. > > >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > > >> >>> abstração. > > >> >>> http://perldoc.perl.org/functions/do.html > > >> >>> > > >> >>> > > >> >>> > > >> >>>> > > >> >>>> O erro que tenho é o seguinte: > > >> >>>> > > >> >>>> Can't locate object method "new" via package "Foo" (perhaps you > > >> >>>> forgot to > > >> >>>> load "Foo"?) at ./main.pl line 10. > > >> >>>> > > >> >>>> Mas se eu uso o "use Foo" funciona. > > >> >>>> > > >> >>>> Abraços, > > >> >>>> > > >> >>>> Tom > > >> >>>> _______________________________________________ > > >> >>>> Cascavel-pm mailing list > > >> >>>> Cascavel-pm em pm.org > > >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > > >> >>>> > > >> >>> > > >> >>> > > >> >>> > > >> >>> -- > > >> >>> "If you?ve never written anything thoughtful, then you?ve never > had > > >> >>> any difficult, important, or interesting thoughts. That?s the > secret: > > >> >>> people who don?t write, are people who don?t think." > > >> >>> > > >> >> > > >> >> > > >> >> > > >> >> -- > > >> >> "If you?ve never written anything thoughtful, then you?ve never had > > >> >> any difficult, important, or interesting thoughts. That?s the > secret: > > >> >> people who don?t write, are people who don?t think." > > >> >> > > >> > > > >> > > > >> > > > >> > -- > > >> > "If you?ve never written anything thoughtful, then you?ve never had > > >> > any difficult, important, or interesting thoughts. That?s the > secret: > > >> > people who don?t write, are people who don?t think." > > >> > > > >> > > >> > > >> > > >> -- > > >> "If you?ve never written anything thoughtful, then you?ve never had > > >> any difficult, important, or interesting thoughts. That?s the secret: > > >> people who don?t write, are people who don?t think." > > >> _______________________________________________ > > >> Cascavel-pm mailing list > > >> Cascavel-pm em pm.org > > >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > > > > _______________________________________________ > > > Cascavel-pm mailing list > > > Cascavel-pm em pm.org > > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > > > > > > -- > > "If you?ve never written anything thoughtful, then you?ve never had > > any difficult, important, or interesting thoughts. That?s the secret: > > people who don?t write, are people who don?t think." > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From daniel-vinciguerra em hotmail.com Tue Dec 7 10:17:01 2010 From: daniel-vinciguerra em hotmail.com (Daniel Vinciguerra) Date: Tue, 7 Dec 2010 16:17:01 -0200 Subject: [Cascavel-pm] =?windows-1252?q?Reflex=E3o_em_Perl?= In-Reply-To: References: , , , , , , , , Message-ID: Isso funciona (certeza!) mas não me parece uma forma muito elegante de se resolver o problema! my ( $class, $method ) = ( 'Foo', 'method' );require $class .".pm";$class->new->$method; Vou consultar uns docs e depois posto algo mais polido! Ua, Daniel Vinciguerra - Developer http://github.com/dvinciguerra Date: Tue, 7 Dec 2010 15:15:01 -0300 From: capmostarda em gmail.com To: cascavel-pm em pm.org Subject: Re: [Cascavel-pm] Reflexão em Perl Também nada, Daniel... Tá tudo no mesmo diretório. Todos arquivos com permissão total, só para teste. E mesmo assim nada. Abraços 2010/12/7 Daniel Vinciguerra coloque o seguinte no seu código... use lib '/path/para/diretório/arquivos/.pm'; ... e descomente o require.Acredito que isso deve funcionar. Ua, Daniel Vinciguerra - Developer http://github.com/dvinciguerra > Date: Tue, 7 Dec 2010 16:02:47 -0200 > From: mantovani em perl.org.br > To: cascavel-pm em pm.org > Subject: Re: [Cascavel-pm] Reflexão em Perl > > Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que > está fazendo o require ? > > 2010/12/7 Tom Mostard : > > > > Daniel, > > Obrigado pela ajuda! Mas aqui continuar sem solução. > > > > package Foo; > > > > sub new { return bless {}, shift } > > sub method { my $self = shift; print "Work!\n" } > > > > 1; > > > > > > package main; > > > > my ( $class, $method ) = ( 'Foo', 'method' ); > > # require $class; > > $class->new->$method; > > > > > > Quando uso o require acima, tenho a seguinte mensagem: > > Can't locate Foo in @INC (@INC contains: /etc/perl > > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > > /usr/local/lib/site_perl .) at ./main.pl line 6. > > > > Se eu comento o "require", tenho a seguinte mensagem: > > Can't locate object method "new" via package "Foo" (perhaps you forgot to > > load "Foo"?) at ./main.pl line 7. > > > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem o > > Moose. Queria resolver isso sem usá-los, se for possível. > > Se uso as duas classes num único arquivo, funciona, mas minha intenção é > > usar uma classe externa, que pode variar conforme a necessidade. > > > > Mais uma vez, obrigado. > > > > Tom > > > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > > escreveu: > >> > >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > >> deixar só a última recomendação, > >> http://en.wikipedia.org/wiki/Metaprogramming > >> > >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > >> preciso trabalhar. > >> > >> Boa noite. > >> > >> 2010/12/7 Daniel de Oliveira Mantovani : > >> > Ops, esqueci de colocar o link do manual do Moose, > >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > >> > > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda > >> > abusar de reflexão e introspecção, com Class::Mop. > >> > > >> > 2010/12/7 Daniel de Oliveira Mantovani : > >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão > >> >> e introspecção: > >> >> > >> >> use Some::Class; > >> >> use Class::MOP; > >> >> > >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); > >> >> > >> >> for my $meth ( $meta->get_all_methods ) { > >> >> print $meth->fully_qualified_name, "\n": > >> >> } > >> >> > >> >> > >> >> 2010/12/7 Daniel de Oliveira Mantovani : > >> >>> 2010/12/7 Tom Mostard : > >> >>>> Colegas, > >> >>>> > >> >>>> Alguém sabe como carregar uma classe que não foi carregada com "use" > >> >>>> através > >> >>>> de reflexão computacional? > >> >>> > >> >>> package Foo; > >> >>> > >> >>> sub new { return bless {}, shift } > >> >>> sub method { my $self = shift; print "Work!\n" } > >> >>> > >> >>> 1; > >> >>> > >> >>> package main; > >> >>> > >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); > >> >>> $class->new->$method; > >> >>> > >> >>> > >> >>> __END__ > >> >>> > >> >>> > >> >>> Outro exemplo, http://nopaste.snit.ch/26735 > >> >>> > >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > >> >>>> > >> >>>> Exemplo: > >> >>>> > >> >>>> my $class = "Foo"; > >> >>>> my $method = "hello"; > >> >>>> my $object = $class->new(); > >> >>>> $object->$method(); // que e o mesmo que $object->hello(); > >> >>>> > >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > >> >>>> Preciso usar o EXPORT ou coisa assim? > >> >>> > >> >>> Não, você não precisa do Export. Você pode usar "do" ou "require". > >> >>> > >> >>> package main; > >> >>> use strict; > >> >>> use warnings; > >> >>> > >> >>> my %cm = (qw/Foo read Bar people Baz should/); > >> >>> > >> >>> foreach my $class ( ( sort keys %cm ) ) { > >> >>> > >> >>> require $class; > >> >>> my $method = $cm{$class}; > >> >>> > >> >>> $class->new->$method; > >> >>> > >> >>> } > >> >>> > >> >>> Uma das utilidades do "require", é quando você precisa carregar um > >> >>> módulo em tempo de execução, que é o seu caso. > >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > >> >>> abstração. > >> >>> http://perldoc.perl.org/functions/do.html > >> >>> > >> >>> > >> >>> > >> >>>> > >> >>>> O erro que tenho é o seguinte: > >> >>>> > >> >>>> Can't locate object method "new" via package "Foo" (perhaps you > >> >>>> forgot to > >> >>>> load "Foo"?) at ./main.pl line 10. > >> >>>> > >> >>>> Mas se eu uso o "use Foo" funciona. > >> >>>> > >> >>>> Abraços, > >> >>>> > >> >>>> Tom > >> >>>> _______________________________________________ > >> >>>> Cascavel-pm mailing list > >> >>>> Cascavel-pm em pm.org > >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > >> >>>> > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> "If you?ve never written anything thoughtful, then you?ve never had > >> >>> any difficult, important, or interesting thoughts. That?s the secret: > >> >>> people who don?t write, are people who don?t think." > >> >>> > >> >> > >> >> > >> >> > >> >> -- > >> >> "If you?ve never written anything thoughtful, then you?ve never had > >> >> any difficult, important, or interesting thoughts. That?s the secret: > >> >> people who don?t write, are people who don?t think." > >> >> > >> > > >> > > >> > > >> > -- > >> > "If you?ve never written anything thoughtful, then you?ve never had > >> > any difficult, important, or interesting thoughts. That?s the secret: > >> > people who don?t write, are people who don?t think." > >> > > >> > >> > >> > >> -- > >> "If you?ve never written anything thoughtful, then you?ve never had > >> any difficult, important, or interesting thoughts. That?s the secret: > >> people who don?t write, are people who don?t think." > >> _______________________________________________ > >> Cascavel-pm mailing list > >> Cascavel-pm em pm.org > >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From capmostarda em gmail.com Tue Dec 7 10:28:36 2010 From: capmostarda em gmail.com (Tom Mostard) Date: Tue, 7 Dec 2010 15:28:36 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: Funcionou mesmo. Obrigado Daniel. Mas realmente não é muito elegante. Também vou continuar procurando algo mais interessante. Se encontrar alguma coisa tão simples quanto, respondo. Obrigado ao Daniel Mantovani também. O Class::MOP e o Moose vão garantir algumas horas de diversão. Tom 2010/12/7 Daniel Vinciguerra > Isso funciona (certeza!) mas não me parece uma forma muito elegante de se > resolver o problema! > > my ( $class, $method ) = ( 'Foo', 'method' ); > require $class .".pm"; > $class->new->$method; > > Vou consultar uns docs e depois posto algo mais polido! > > Ua, > > Daniel Vinciguerra - Developer > http://github.com/dvinciguerra > > > > > > ------------------------------ > Date: Tue, 7 Dec 2010 15:15:01 -0300 > From: capmostarda em gmail.com > > To: cascavel-pm em pm.org > Subject: Re: [Cascavel-pm] Reflexão em Perl > > Também nada, Daniel... > > Tá tudo no mesmo diretório. Todos arquivos com permissão total, só para > teste. E mesmo assim nada. > > Abraços > > 2010/12/7 Daniel Vinciguerra > > > coloque o seguinte no seu código... > > use lib '/path/para/diretório/arquivos/.pm'; > > ... e descomente o require. > Acredito que isso deve funcionar. > > Ua, > > Daniel Vinciguerra - Developer > http://github.com/dvinciguerra > > > > > > > Date: Tue, 7 Dec 2010 16:02:47 -0200 > > From: mantovani em perl.org.br > > To: cascavel-pm em pm.org > > Subject: Re: [Cascavel-pm] Reflexão em Perl > > > > > Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que > > está fazendo o require ? > > > > 2010/12/7 Tom Mostard : > > > > > > Daniel, > > > Obrigado pela ajuda! Mas aqui continuar sem solução. > > > > > > package Foo; > > > > > > sub new { return bless {}, shift } > > > sub method { my $self = shift; print "Work!\n" } > > > > > > 1; > > > > > > > > > package main; > > > > > > my ( $class, $method ) = ( 'Foo', 'method' ); > > > # require $class; > > > $class->new->$method; > > > > > > > > > Quando uso o require acima, tenho a seguinte mensagem: > > > Can't locate Foo in @INC (@INC contains: /etc/perl > > > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > > > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > > > /usr/local/lib/site_perl .) at ./main.pl line 6. > > > > > > Se eu comento o "require", tenho a seguinte mensagem: > > > Can't locate object method "new" via package "Foo" (perhaps you forgot > to > > > load "Foo"?) at ./main.pl line 7. > > > > > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP > nem o > > > Moose. Queria resolver isso sem usá-los, se for possível. > > > Se uso as duas classes num único arquivo, funciona, mas minha intenção > é > > > usar uma classe externa, que pode variar conforme a necessidade. > > > > > > Mais uma vez, obrigado. > > > > > > Tom > > > > > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > > > escreveu: > > >> > > >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > > >> deixar só a última recomendação, > > >> http://en.wikipedia.org/wiki/Metaprogramming > > >> > > >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > > >> preciso trabalhar. > > >> > > >> Boa noite. > > >> > > >> 2010/12/7 Daniel de Oliveira Mantovani : > > >> > Ops, esqueci de colocar o link do manual do Moose, > > >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > > >> > > > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e > ainda > > >> > abusar de reflexão e introspecção, com Class::Mop. > > >> > > > >> > 2010/12/7 Daniel de Oliveira Mantovani : > > >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de > reflexão > > >> >> e introspecção: > > >> >> > > >> >> use Some::Class; > > >> >> use Class::MOP; > > >> >> > > >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); > > >> >> > > >> >> for my $meth ( $meta->get_all_methods ) { > > >> >> print $meth->fully_qualified_name, "\n": > > >> >> } > > >> >> > > >> >> > > >> >> 2010/12/7 Daniel de Oliveira Mantovani : > > >> >>> 2010/12/7 Tom Mostard : > > >> >>>> Colegas, > > >> >>>> > > >> >>>> Alguém sabe como carregar uma classe que não foi carregada com > "use" > > >> >>>> através > > >> >>>> de reflexão computacional? > > >> >>> > > >> >>> package Foo; > > >> >>> > > >> >>> sub new { return bless {}, shift } > > >> >>> sub method { my $self = shift; print "Work!\n" } > > >> >>> > > >> >>> 1; > > >> >>> > > >> >>> package main; > > >> >>> > > >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); > > >> >>> $class->new->$method; > > >> >>> > > >> >>> > > >> >>> __END__ > > >> >>> > > >> >>> > > >> >>> Outro exemplo, http://nopaste.snit.ch/26735 > > >> >>> > > >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > > >> >>>> > > >> >>>> Exemplo: > > >> >>>> > > >> >>>> my $class = "Foo"; > > >> >>>> my $method = "hello"; > > >> >>>> my $object = $class->new(); > > >> >>>> $object->$method(); // que e o mesmo que $object->hello(); > > >> >>>> > > >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > > >> >>>> Preciso usar o EXPORT ou coisa assim? > > >> >>> > > >> >>> Não, você não precisa do Export. Você pode usar "do" ou > "require". > > >> >>> > > >> >>> package main; > > >> >>> use strict; > > >> >>> use warnings; > > >> >>> > > >> >>> my %cm = (qw/Foo read Bar people Baz should/); > > >> >>> > > >> >>> foreach my $class ( ( sort keys %cm ) ) { > > >> >>> > > >> >>> require $class; > > >> >>> my $method = $cm{$class}; > > >> >>> > > >> >>> $class->new->$method; > > >> >>> > > >> >>> } > > >> >>> > > >> >>> Uma das utilidades do "require", é quando você precisa carregar um > > >> >>> módulo em tempo de execução, que é o seu caso. > > >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > > >> >>> abstração. > > >> >>> http://perldoc.perl.org/functions/do.html > > >> >>> > > >> >>> > > >> >>> > > >> >>>> > > >> >>>> O erro que tenho é o seguinte: > > >> >>>> > > >> >>>> Can't locate object method "new" via package "Foo" (perhaps you > > >> >>>> forgot to > > >> >>>> load "Foo"?) at ./main.pl line 10. > > >> >>>> > > >> >>>> Mas se eu uso o "use Foo" funciona. > > >> >>>> > > >> >>>> Abraços, > > >> >>>> > > >> >>>> Tom > > >> >>>> _______________________________________________ > > >> >>>> Cascavel-pm mailing list > > >> >>>> Cascavel-pm em pm.org > > >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > > >> >>>> > > >> >>> > > >> >>> > > >> >>> > > >> >>> -- > > >> >>> "If you?ve never written anything thoughtful, then you?ve never > had > > >> >>> any difficult, important, or interesting thoughts. That?s the > secret: > > >> >>> people who don?t write, are people who don?t think." > > >> >>> > > >> >> > > >> >> > > >> >> > > >> >> -- > > >> >> "If you?ve never written anything thoughtful, then you?ve never had > > >> >> any difficult, important, or interesting thoughts. That?s the > secret: > > >> >> people who don?t write, are people who don?t think." > > >> >> > > >> > > > >> > > > >> > > > >> > -- > > >> > "If you?ve never written anything thoughtful, then you?ve never had > > >> > any difficult, important, or interesting thoughts. That?s the > secret: > > >> > people who don?t write, are people who don?t think." > > >> > > > >> > > >> > > >> > > >> -- > > >> "If you?ve never written anything thoughtful, then you?ve never had > > >> any difficult, important, or interesting thoughts. That?s the secret: > > >> people who don?t write, are people who don?t think." > > >> _______________________________________________ > > >> Cascavel-pm mailing list > > >> Cascavel-pm em pm.org > > >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > > > > _______________________________________________ > > > Cascavel-pm mailing list > > > Cascavel-pm em pm.org > > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > > > > > > -- > > "If you?ve never written anything thoughtful, then you?ve never had > > any difficult, important, or interesting thoughts. That?s the secret: > > people who don?t write, are people who don?t think." > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > _______________________________________________ Cascavel-pm mailing list > Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From daniel-vinciguerra em hotmail.com Tue Dec 7 10:58:48 2010 From: daniel-vinciguerra em hotmail.com (Daniel Vinciguerra) Date: Tue, 7 Dec 2010 16:58:48 -0200 Subject: [Cascavel-pm] =?windows-1252?q?Reflex=E3o_em_Perl?= In-Reply-To: References: , , , , , , , , , , Message-ID: Ola Tom, Andei dando uma pesquisada e fazendo uns testes e constatei que vários modulos utilizam desta forma para fazer "load das classes" em tempo de execução. Posso até citar alguns para você dar uma olhada... Mojo::Loader, Class::Factory, Class::Loader, Class::MOP...Acho que o Catalyst só não faz isso porque usa o Moose pra fazer... Então acho que você não vai conseguir fugir muito disso... Ou algum modulo que faça (aconselhado!) ou a solução proposta no outro email. Fica aqui minha dica!Se conseguir algo ou se alguem souber de outro jeito bacana de fazer isso eu adoraria conhecer! : ) Ua, Daniel Vinciguerra - Developer http://github.com/dvinciguerra Date: Tue, 7 Dec 2010 15:28:36 -0300 From: capmostarda em gmail.com To: cascavel-pm em pm.org Subject: Re: [Cascavel-pm] Reflexão em Perl Funcionou mesmo. Obrigado Daniel. Mas realmente não é muito elegante. Também vou continuar procurando algo mais interessante. Se encontrar alguma coisa tão simples quanto, respondo. Obrigado ao Daniel Mantovani também. O Class::MOP e o Moose vão garantir algumas horas de diversão. Tom 2010/12/7 Daniel Vinciguerra Isso funciona (certeza!) mas não me parece uma forma muito elegante de se resolver o problema! my ( $class, $method ) = ( 'Foo', 'method' );require $class .".pm"; $class->new->$method; Vou consultar uns docs e depois posto algo mais polido! Ua, Daniel Vinciguerra - Developer http://github.com/dvinciguerra Date: Tue, 7 Dec 2010 15:15:01 -0300 From: capmostarda em gmail.com To: cascavel-pm em pm.org Subject: Re: [Cascavel-pm] Reflexão em Perl Também nada, Daniel... Tá tudo no mesmo diretório. Todos arquivos com permissão total, só para teste. E mesmo assim nada. Abraços 2010/12/7 Daniel Vinciguerra coloque o seguinte no seu código... use lib '/path/para/diretório/arquivos/.pm'; ... e descomente o require.Acredito que isso deve funcionar. Ua, Daniel Vinciguerra - Developer http://github.com/dvinciguerra > Date: Tue, 7 Dec 2010 16:02:47 -0200 > From: mantovani em perl.org.br > To: cascavel-pm em pm.org > Subject: Re: [Cascavel-pm] Reflexão em Perl > > Você tem um arquivo chamado Foo.pm no mesmo diretório do script.pl que > está fazendo o require ? > > 2010/12/7 Tom Mostard : > > > > Daniel, > > Obrigado pela ajuda! Mas aqui continuar sem solução. > > > > package Foo; > > > > sub new { return bless {}, shift } > > sub method { my $self = shift; print "Work!\n" } > > > > 1; > > > > > > package main; > > > > my ( $class, $method ) = ( 'Foo', 'method' ); > > # require $class; > > $class->new->$method; > > > > > > Quando uso o require acima, tenho a seguinte mensagem: > > Can't locate Foo in @INC (@INC contains: /etc/perl > > /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 > > /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 > > /usr/local/lib/site_perl .) at ./main.pl line 6. > > > > Se eu comento o "require", tenho a seguinte mensagem: > > Can't locate object method "new" via package "Foo" (perhaps you forgot to > > load "Foo"?) at ./main.pl line 7. > > > > Será que preciso instalar algum módulo? Ainda não tentei o Class::MOP nem o > > Moose. Queria resolver isso sem usá-los, se for possível. > > Se uso as duas classes num único arquivo, funciona, mas minha intenção é > > usar uma classe externa, que pode variar conforme a necessidade. > > > > Mais uma vez, obrigado. > > > > Tom > > > > Em 7 de dezembro de 2010 02:38, Daniel de Oliveira Mantovani > > escreveu: > >> > >> Abusando da lista, e mandando 1 milhão de e-mail na mesma thread, vou > >> deixar só a última recomendação, > >> http://en.wikipedia.org/wiki/Metaprogramming > >> > >> Eu gostaria de falar muito mais sobre reflexão e introspecção, mas > >> preciso trabalhar. > >> > >> Boa noite. > >> > >> 2010/12/7 Daniel de Oliveira Mantovani : > >> > Ops, esqueci de colocar o link do manual do Moose, > >> > http://search.cpan.org/~drolsky/Moose-1.21/lib/Moose/Manual.pod > >> > > >> > Só para ficar mais claro, você pode usar toda a magia do Moose e ainda > >> > abusar de reflexão e introspecção, com Class::Mop. > >> > > >> > 2010/12/7 Daniel de Oliveira Mantovani : > >> >> Perl é arte, você pode usar toda a magia do Moose e abusar de reflexão > >> >> e introspecção: > >> >> > >> >> use Some::Class; > >> >> use Class::MOP; > >> >> > >> >> my $meta = Class::MOP::Class->initialize('Some::Class'); > >> >> > >> >> for my $meth ( $meta->get_all_methods ) { > >> >> print $meth->fully_qualified_name, "\n": > >> >> } > >> >> > >> >> > >> >> 2010/12/7 Daniel de Oliveira Mantovani : > >> >>> 2010/12/7 Tom Mostard : > >> >>>> Colegas, > >> >>>> > >> >>>> Alguém sabe como carregar uma classe que não foi carregada com "use" > >> >>>> através > >> >>>> de reflexão computacional? > >> >>> > >> >>> package Foo; > >> >>> > >> >>> sub new { return bless {}, shift } > >> >>> sub method { my $self = shift; print "Work!\n" } > >> >>> > >> >>> 1; > >> >>> > >> >>> package main; > >> >>> > >> >>> my ( $class, $method ) = ( 'Foo', 'method' ); > >> >>> $class->new->$method; > >> >>> > >> >>> > >> >>> __END__ > >> >>> > >> >>> > >> >>> Outro exemplo, http://nopaste.snit.ch/26735 > >> >>> > >> >>>> Sei que Perl suporta, mas não estou conseguindo implementar. > >> >>>> > >> >>>> Exemplo: > >> >>>> > >> >>>> my $class = "Foo"; > >> >>>> my $method = "hello"; > >> >>>> my $object = $class->new(); > >> >>>> $object->$method(); // que e o mesmo que $object->hello(); > >> >>>> > >> >>>> Implementei a classe Foo, e salvei no mesmo diretório como Foo.pm > >> >>>> Preciso usar o EXPORT ou coisa assim? > >> >>> > >> >>> Não, você não precisa do Export. Você pode usar "do" ou "require". > >> >>> > >> >>> package main; > >> >>> use strict; > >> >>> use warnings; > >> >>> > >> >>> my %cm = (qw/Foo read Bar people Baz should/); > >> >>> > >> >>> foreach my $class ( ( sort keys %cm ) ) { > >> >>> > >> >>> require $class; > >> >>> my $method = $cm{$class}; > >> >>> > >> >>> $class->new->$method; > >> >>> > >> >>> } > >> >>> > >> >>> Uma das utilidades do "require", é quando você precisa carregar um > >> >>> módulo em tempo de execução, que é o seu caso. > >> >>> Na verdade, tanto "use" como "require" usam o "do". Ambos são uma > >> >>> abstração. > >> >>> http://perldoc.perl.org/functions/do.html > >> >>> > >> >>> > >> >>> > >> >>>> > >> >>>> O erro que tenho é o seguinte: > >> >>>> > >> >>>> Can't locate object method "new" via package "Foo" (perhaps you > >> >>>> forgot to > >> >>>> load "Foo"?) at ./main.pl line 10. > >> >>>> > >> >>>> Mas se eu uso o "use Foo" funciona. > >> >>>> > >> >>>> Abraços, > >> >>>> > >> >>>> Tom > >> >>>> _______________________________________________ > >> >>>> Cascavel-pm mailing list > >> >>>> Cascavel-pm em pm.org > >> >>>> http://mail.pm.org/mailman/listinfo/cascavel-pm > >> >>>> > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> "If you?ve never written anything thoughtful, then you?ve never had > >> >>> any difficult, important, or interesting thoughts. That?s the secret: > >> >>> people who don?t write, are people who don?t think." > >> >>> > >> >> > >> >> > >> >> > >> >> -- > >> >> "If you?ve never written anything thoughtful, then you?ve never had > >> >> any difficult, important, or interesting thoughts. That?s the secret: > >> >> people who don?t write, are people who don?t think." > >> >> > >> > > >> > > >> > > >> > -- > >> > "If you?ve never written anything thoughtful, then you?ve never had > >> > any difficult, important, or interesting thoughts. That?s the secret: > >> > people who don?t write, are people who don?t think." > >> > > >> > >> > >> > >> -- > >> "If you?ve never written anything thoughtful, then you?ve never had > >> any difficult, important, or interesting thoughts. That?s the secret: > >> people who don?t write, are people who don?t think." > >> _______________________________________________ > >> Cascavel-pm mailing list > >> Cascavel-pm em pm.org > >> http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm em pm.org > > http://mail.pm.org/mailman/listinfo/cascavel-pm > > > > > > -- > "If you?ve never written anything thoughtful, then you?ve never had > any difficult, important, or interesting thoughts. That?s the secret: > people who don?t write, are people who don?t think." > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm _______________________________________________ Cascavel-pm mailing list Cascavel-pm em pm.org http://mail.pm.org/mailman/listinfo/cascavel-pm -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From edencardim em gmail.com Wed Dec 8 03:32:45 2010 From: edencardim em gmail.com (Eden Cardim) Date: Wed, 8 Dec 2010 09:32:45 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: 2010/12/7 Daniel Vinciguerra : > Isso funciona (certeza!) mas não me parece uma forma muito elegante de se > resolver o problema! > my ( $class, $method ) = ( 'Foo', 'method' ); > require $class .".pm"; > $class->new->$method; use FindBin; use lib $FindBin::Bin; use Foo; --    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://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/ From breno em rio.pm.org Thu Dec 9 13:27:50 2010 From: breno em rio.pm.org (breno) Date: Thu, 9 Dec 2010 19:27:50 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Reflex=E3o_em_Perl?= In-Reply-To: References: Message-ID: 2010/12/7 Daniel Vinciguerra : > Isso funciona (certeza!) mas não me parece uma forma muito elegante de se > resolver o problema! > my ( $class, $method ) = ( 'Foo', 'method' ); > require $class .".pm"; > $class->new->$method; > Vou consultar uns docs e depois posto algo mais polido! Engraçado ninguém ter mencionado o Class::Load ----------8<---------- use Class::Load ':all'; my ($class, $method) = ( 'Minha::Classe', 'meu_metodo' ); load_class $class; $class->new->$method; ---------->8---------- O 'require' exige nomes de módulos na forma "Class/Name.pm". Para usar a forma tradicional ("Class::Name") existem módulos como o Class::Load e o Module::Load - este último funciona da mesma forma, mas oferece menos opções. Finalmente, se você tem *certeza* que vai usar todos os módulos que pretende invocar dinamicamente (ou prefere penalidades durante a compilação do que durante a execução), pode fazer "use" em todos eles no inicio do programa, e depois chamar dinamicamente. Por exemplo: ----------8<---------- use Foo; use Bar; use Baz; my ($class, $method) = ( 'Foo', 'meu_metodo' ); $class->new->$method; ---------->8---------- []s -b From sammuel.souza em gmail.com Tue Dec 14 18:27:02 2010 From: sammuel.souza em gmail.com (Sammuel Souza) Date: Tue, 14 Dec 2010 23:27:02 -0300 Subject: [Cascavel-pm] =?iso-8859-1?q?Convers=E3o_de_banco_de_dados_para_M?= =?iso-8859-1?q?ySQL?= Message-ID: Ola, procurei procurei mas nao achei, talvez alguem ja tenha visto e tal. um conversão de banco de dados FireBird, SQLServer para Mysql tipo, gero um arquivo .sql e executaria um firebird2mysql.pl firebird.sql mysql.sql sql2mysql.pl firebird.sql sql.sql ele converteria, achei este: http://pgfoundry.org/frs/?group_id=1000198 mysql2pgsql.pl teria algo deste tipo ou tenho q fazer montar um? From agnaldo em starweb-software.com.br Sat Dec 18 04:09:10 2010 From: agnaldo em starweb-software.com.br (Agnaldo Macedo) Date: Sat, 18 Dec 2010 10:09:10 -0200 Subject: [Cascavel-pm] Socket References: Message-ID: <2540397751F544C281EE56B180330FCE@NBPROGRESS> Olá pessoal. Tenho uma programa que recebe conexões via scoket (o código esta abaixo). Meu problema é que nesse ponto print "Aguardando ..."; my $new_sock = $sock->accept(); print "Processando ..."; my $data = ''; $data = <$new_sock>; print "Dados recebidos ..."; às vezes, por motivo de "alguma coisa" no client que faz a conexão, ele trava. Eu fico com e mensagem de "Processando ..." na tela. Ou seja, na instrução $data = <$new_sock>; ele fica lendo, lendo, lendo e não chega ao final. Não sei se é falta de algum "byte" finalizado da mensagem, ou se apenas problema de time out e ele fica esperando. Teria algo que eu pudesse "quebrar" a conexão e seguir adiante, sem ficar preso ali. use warnings; use strict; use IO::Socket; $| = 1; my $sock = IO::Socket::INET->new (LocalPort => 8010, Type => SOCK_STREAM, timeout => 120, Proto => 'tcp', Listen => 50); unless ($sock) { die "Servidor não pode ser criado" } print "Servidor iniciado\n"; my $continua = 'SIM'; while ($continua eq 'SIM') { print "Aguardando ..."; my $new_sock = $sock->accept(); print "Processando ..."; my $data = ''; $data = <$new_sock>; print "Dados recebidos ..."; if ($data) { print "Dados disponiveis ...\n"; } else { print "Nada a processar!\n"; } close ($new_sock); } close($sock); exit(0); From russoz em gmail.com Sat Dec 18 04:34:58 2010 From: russoz em gmail.com (Alexei Znamensky) Date: Sat, 18 Dec 2010 10:34:58 -0200 Subject: [Cascavel-pm] Socket In-Reply-To: <2540397751F544C281EE56B180330FCE@NBPROGRESS> References: <2540397751F544C281EE56B180330FCE@NBPROGRESS> Message-ID: 2010/12/18 Agnaldo Macedo > > Olá pessoal. > > Tenho uma programa que recebe conexões via scoket (o código esta abaixo). > Meu problema é que nesse ponto > print "Aguardando ..."; > my $new_sock = $sock->accept(); > print "Processando ..."; > my $data = ''; > $data = <$new_sock>; > print "Dados recebidos ..."; > às vezes, por motivo de "alguma coisa" no client que faz a conexão, ele > trava. > Eu fico com e mensagem de "Processando ..." na tela. > Ou seja, na instrução > $data = <$new_sock>; > ele fica lendo, lendo, lendo e não chega ao final. > Não sei se é falta de algum "byte" finalizado da mensagem, ou se apenas > problema de time out e ele fica esperando. > Teria algo que eu pudesse "quebrar" a conexão e seguir adiante, sem ficar > preso ali. > > > > use warnings; > use strict; > use IO::Socket; > > $| = 1; > > my $sock = IO::Socket::INET->new (LocalPort => 8010, Type => SOCK_STREAM, > timeout => 120, Proto => 'tcp', Listen => 50); > unless ($sock) { die "Servidor não pode ser criado" } > print "Servidor iniciado\n"; > > my $continua = 'SIM'; > while ($continua eq 'SIM') > { > print "Aguardando ..."; > my $new_sock = $sock->accept(); > print "Processando ..."; > my $data = ''; > $data = <$new_sock>; > print "Dados recebidos ..."; > > if ($data) > { > print "Dados disponiveis ...\n"; > } > else > { > print "Nada a processar!\n"; > } > close ($new_sock); > } > close($sock); > exit(0); > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > Agnaldo, Pode ser várias coisas. Pode ser TIME_WAIT [1], pode ser limites do SO. Sugiro você dar uma olhada no módulo Net::Server [2] para não ficar reinventado a roda. Ou, extrapolando um pouco, e presumindo o que você pretende fazer com esse código, já ir apra uma solução mais robusta, como algum sistema de messaging. Não mexi ainda com ele, mas o pessoal aqui do Perl tem falado muito bem do RabbitMQ [3]. Existem vários níveis de "rodas" que pode ser reinventados. A não ser que você *queira* fazer isso, talvez para aprender como funcionam as coisas, não acho que valha muito a pena. my $twocents; []s, -- Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [ www.flickr.com/photos/alexeiz] «Only love / Can bring the rain / That makes you yearn to the sky» [1] http://developerweb.net/viewtopic.php?id=2941 [2] http://lmctfy.org/Net::Server [3] http://www.rabbitmq.com/ -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From breno em rio.pm.org Mon Dec 27 14:32:39 2010 From: breno em rio.pm.org (breno) Date: Mon, 27 Dec 2010 20:32:39 -0200 Subject: [Cascavel-pm] =?iso-8859-1?q?Convers=E3o_de_banco_de_dados_para_M?= =?iso-8859-1?q?ySQL?= In-Reply-To: References: Message-ID: 2010/12/15 Sammuel Souza : > Ola, > > procurei procurei mas nao achei, talvez alguem ja tenha visto e tal. > > um conversão de banco de dados FireBird, SQLServer para Mysql > > tipo, gero um arquivo .sql e executaria um > > firebird2mysql.pl firebird.sql mysql.sql > sql2mysql.pl firebird.sql sql.sql > > ele converteria, achei este: http://pgfoundry.org/frs/?group_id=1000198 > mysql2pgsql.pl > > teria algo deste tipo ou tenho q fazer montar um? Oi Sammuel, acredito que o SQL::Translator faz o q vc precisa: ------------8<------------ my $output = $translator->translate( from => 'SQLServer', to => 'MySQL', # Or an arrayref of filenames, i.e. [ $file1, $file2, $file3 ] filename => $file, ) or die $translator->error; ------------>8------------ Você não precisa criar um conversor, o módulo já instala um pra vc chamado "sqlt" > sqlt --from=SQLServer --to=MySQL arquivo.sql digite "sqlt --help" para mais informações, ou veja http://search.cpan.org/perldoc?sqlt []s -b