I am trying to get the exception class described in the guide to work, but am having trouble with "die" returning the class incorrectly.
The example in the guide was: die My::Exception->RetCode(code => 204); The module code is at: http://thingy.kcilink.com/modperlguide/perl/The_My_Exception_class_in_its_e.html with two modifications (the last "die" in sub AUTOLOAD was changed to CORE::die to prevent a perl warning message about it being ambiguous, and the missing semicolon at the end of the first line "package ..." was added). The following script code does not work #------------------------------------- use My::Exception; eval { die My::Exception->Return(code => "abc"); }; if ($@) { use Data::Dumper; print Dumper($@); } #------------------------------------- It generates the output: #------------------------------------- $VAR1 = bless( { 'text' => 'My::Exception', 'caller' => { 'line' => 19, 'filename' => 'My/Exception.pm', 'package' => 'My::Exception' } }, 'My::Exception::UnCaught' ); #------------------------------------- with the class indicating that the exception was not caught. Tracing it in the debugger shows that it executes My::Exception::die using "My::Exception" as the first argument. If I put parens around the argument to die, as follows, it works (calls AUTOLOAD first then returns result of that as first argument to My::Exception::die), returning the correctly classed object. Code: #------------------------------------- use My::Exception; eval { die (My::Exception->Return(code => "abc")); }; if ($@) { use Data::Dumper; print Dumper($@); } #------------------------------------- Output: #------------------------------------- $VAR1 = bless( { 'caller' => { 'line' => 5, 'filename' => './exceptions2', 'package' => 'main' }, 'code' => 'abc' }, 'My::Exception::Return' ); #------------------------------------- It appears that "->" is too low a precedence. Is there a way around this without requiring that parentheses be used around die's arguments? I'm running this under perl5.6.0. Here is output of perl -V: Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration: Platform: osname=linux, osvers=2.4.0, archname=i586-linux uname='linux manson 2.4.0 #1 wed aug 2 20:22:26 gmt 2000 i686 unknown ' config_args='-ds -e -Dprefix=/usr -Di_db -Di_dbm -Di_ndbm -Di_gdbm' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef Compiler: cc='cc', optimize='-O2 -pipe', gccversion=2.95.2 19991024 (release) cppflags='-fno-strict-aliasing -I/usr/local/include' ccflags ='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' stdchar='char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 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, usemymalloc=n, prototype=define Linker and Libraries: ld='cc', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib libs=-lnsl -ldl -lm -lc -lcrypt libc=, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic' cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under linux Compiled at Jan 19 2001 05:42:10 %ENV: PERL5LIB="/home/mpressly/development/library" @INC: /home/mpressly/development/library /usr/lib/perl5/5.6.0/i586-linux /usr/lib/perl5/5.6.0 /usr/lib/perl5/site_perl/5.6.0/i586-linux /usr/lib/perl5/site_perl/5.6.0 /usr/lib/perl5/site_perl . Matthew Pressly