Hello Tom, thanks for your answer
On Thu, Aug 27, 2009 at 11:45 PM, Tomas Doran<[email protected]> wrote: > > On 27 Aug 2009, at 21:52, pablo marin-garcia wrote: > Nono, that isn't a Moose feature at all.. > > It's the use of Moose::Autobox which allows you to lexically call stuff... > So for example: > > use Moose::Autobox; > my @list = 2->flatten; > my @other_list = [ 2 ]->flatten; > is_deeply \...@list, \...@other_list; > >>> I'm just not seeing how Moose::Autobox can pass it's tests for you (which >>> involve ->flatten working), but fail when run for real.. The reason the the autobox pass is because they are not testing 'flatten' or 'to' or other 'methods' like that. Looking deeply on autobox, I have seen that what it does it to call SCALAR::the_function, ARRAY::the_function...etc depending of the ref() or your 'object' Then I unpacked the autobox tar and changed the tests and added a call for flatten. It fails. But if I define the sub ARRAY::flatten {} it works: ----- $ cat t/flatten.t use autobox; use Test::More; use Data::Dumper; sub SCALAR::to_upper { uc $_[0] } sub SCALAR::flatten {[$_[0]]} sub SCALAR::to { $_[0]. '_to_'.$_[1]} sub ARRAY::flatten{$_[0]} my $range = eval{10->to(1)}; print Dumper $range; is_deeply ($range, '10_to_1' , "autobox ->to test") or diag ($@); my @list = eval{ 2->flatten} || 2; my @other_list = eval{[ 2 ]->flatten}||[2]; is_deeply (\...@list, \...@other_list, "testing autobox flatten") or diag ("$@"); is('hello'->to_upper, 'HELLO', 'autobox is enabled'); ----- This test works with the subs defined: > make test > [...] > t/flatten.t .... 1/? # Tests were run but no plan was declared and > done_testing() was not seen. > t/flatten.t .... All 3 subtests passed > [...] But it fails *without* the subs ARRAY, SCALAR etc: # Failed test 'autobox ->to test' # at t/flatten.t line 16. # got: undef # expected: '10_to_1' # Can't call method "to" without a package or object reference at t/flatten.t line 14. # Failed test 'testing autobox flatten' # at t/flatten.t line 20. # Structures begin differing at: # $got->[0] = '2' # $expected->[0] = ARRAY(0x81f88c0) # Can't call method "flatten" on unblessed reference at t/flatten.t line 19. Can't locate object method "to_upper" via package "hello" (perhaps you forgot to load "hello"?) at t/flatten.t line 23. This drive me to the conclusion that somewere the xxx::flaten mehtod is not defined, so I am missing the module where this is defined, probably in Moose::Autobox:: or autobox:: submodules So someone knows where the Moose::Autobox::ARRAY::flatten lives (or whatever is the namespace given to it)? Am I in the right path of reasoning or I have missed something? I am new to all this 'perl6' magic like autobox implementation and 'modern perl'. BUT the thing that drive me crazy is that the 'make test' done manually was ok with the SCALAR etc subs, but when I run calling only the test it FAILED!!!!! ======= p...@deskpro17122[~/.cpan/build/autobox-2.55-RKhwNV]226 $ perl t/flatten.t $VAR1 = undef; not ok 1 - autobox ->to test # Failed test 'autobox ->to test' # at t/flatten.t line 16. # got: undef # expected: '10_to_1' # Can't call method "to" without a package or object reference at t/flatten.t line 14. not ok 2 - testing autobox flatten # Failed test 'testing autobox flatten' # at t/flatten.t line 20. # Structures begin differing at: # $got->[0] = '2' # $expected->[0] = ARRAY(0x81f8904) # Can't call method "flatten" on unblessed reference at t/flatten.t line 19. Can't locate object method "to_upper" via package "hello" (perhaps you forgot to load "hello"?) at t/flatten.t line 23. # Tests were run but no plan was declared and done_testing() was nots seen. [~/.cpan/build/autobox-2.55-RKhwNV]227 $ make test PERL_DL_NONLAZY=1 /software/perl-5.8.8/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/all.t ........ ok t/autoref.t .... ok t/coderef.t .... ok t/default.t .... ok t/export.t ..... ok t/flatten.t .... 1/? # Tests were run but no plan was declared and done_testing() was not seen. t/flatten.t .... All 3 subtests passed [..] ======= I will think about it during the long weekend ;-) Definitively I have some misconfigurations somewhere :-( Regards Pablo PS: About mi perl installation: >> cpan[1]> m /Autobox/ > > Those are versions in your CPAN index, not the versions you have installed. Yes, I know this, but as you can see there was an '=' sign Module = Moose::Autobox::Indexed (RJBS/Moose-Autobox-0.09.tar.gz) telling that I am up to date, so it was not necesary to go go to the : $ perl -mautobox -e 'print $autobox::VERSION' 2.55 $ perl -mMoose::Autobox -e 'print $Moose::Autobox::VERSION' 0.09 I have installed autobox in $ find . -name '*autobox*' ./man/man3/autobox.3pm ./perllib/i486-linux-gnu-thread-multi/auto/autobox ./perllib/i486-linux-gnu-thread-multi/auto/autobox/autobox.so ./perllib/i486-linux-gnu-thread-multi/auto/autobox/autobox.bs ./perllib/i486-linux-gnu-thread-multi/autobox ./perllib/i486-linux-gnu-thread-multi/autobox.pod ./perllib/i486-linux-gnu-thread-multi/autobox.pm and my my perl -V $ perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.8lustre, archname=i686-linux-thread-multi uname='linux bc-1-2-01 2.6.8lustre #1 smp mon oct 17 13:36:09 bst 2005 i686 gnulinux ' config_args='' hint=recommended, useposix=true, d_sigaction=define usethreads=define use5005threads=undef useithreads=define usemultiplicity=define useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc-3.4', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include' ccversion='', gccversion='3.4.4 20050314 (prerelease) (Debian 3.4.3-13sarge1)', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='gcc-3.4', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=/lib/libc-2.3.2.so, so=so, useshrplib=true, libperl=libperl.so gnulibc_version='2.3.2' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/software/perl-5.8.8/lib/5.8.8/i686-linux-thread-multi/CORE' cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API Built under linux Compiled at Jan 8 2007 15:50:11 %ENV: @INC: /nfs/users/nfs_p/pg4/local_perl/perllib/i686-linux-thread-multi /nfs/users/nfs_p/pg4/local_perl/perllib /nfs/users/nfs_p/pg4/local_perl/lib/perl5/ /nfs/users/nfs_p/pg4/local_perl/perllib/i486-linux-gnu-thread-multi /nfs/users/nfs_p/pg4/local_perl/perllib/i386-linux-thread-multi /software/perl-5.8.8/lib/5.8.8/i686-linux-thread-multi /software/perl-5.8.8/lib/5.8.8 /software/perl-5.8.8/lib/site_perl/5.8.8/i686-linux-thread-multi /software/perl-5.8.8/lib/site_perl/5.8.8 /software/perl-5.8.8/lib/site_perl . -- - Pablo Marin-Garcia _______________________________________________ List: [email protected] Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
