Yes, it was undefined even inside foreach. You can see it above the debug lines on my code.
Luke Lu さんは��きました: > Hi, > the $obj is undefined everytime? > > -----邮件原件----- > 发件人: Nguyen Vu Hung [mailto:[EMAIL PROTECTED] > 发送时间: 2007年8月16日 9:34 > 收件人: Luke Lu > 抄送: modperl@perl.apache.org > 主题: Re: 答复: 答复: Class inheritance, and SUPER under mod_perl2 > > Actually I did exactly what you told me yesterday and $obj was still > undefined. > > Here is the code ( check if $obj is undefined inside foreach ) > > ------------ > package XXX::YYY3; > > @ISA = qw(Net::Cmd IO::Socket::INET); > > sub new > { > my $self = shift; > my $type = ref($self) || $self; > > my $hosts = "localhost"; > my $obj; > my @localport = (); > > my $h; > foreach $h (@{$hosts}) > { > $obj = $type->SUPER::new(PeerAddr => ($h), > PeerPort => 110, > Proto => 'tcp', > LocalPort => 110, > Timeout => 120 > );# and last; > > # obj is undefined now. so weird. > unless ( defined $obj ) { > $sl->log_serror(__FILE__, __LINE__, Apache2::Const::LOG_ERR, > APR::Const::SUCCESS, "XXX:: undef obj! ERROR. "); > } > last; > } > -------------------- > Luke Lu さんは��きました: > >> Ok, so sorry, >> You only put the print "..." inside the foreach. >> Please try it. >> >> -----邮件原件----- >> 发件人: Nguyen Vu Hung [mailto:[EMAIL PROTECTED] >> 发送时间: 2007年8月16日 9:24 >> 收件人: Luke Lu >> 抄送: modperl@perl.apache.org >> 主题: Re: 答复: Class inheritance, and SUPER under mod_perl2 >> >> This code didn't run. >> >> I don't think we can put an "if" clause inside >> >> $type->SUPER::new(...) >> >> The error I got when running this code is: >> >> syntax error at /XXX/YYY3.pm line 74, near "if"\nsyntax error at >> /XXX/YYY3.pm line 77, near "} else"\nsyntax error at /XXX/YYY3.pm line 82, >> near " >> >> Luke Lu さんは��きました: >> >> >>> Hi, >>> In this part: >>> foreach $h (@{$hosts}) >>> { >>> $obj = $type->SUPER::new(PeerAddr => ($h), >>> PeerPort => 110, >>> Proto => 'tcp', >>> LocalPort => 110, >>> Timeout => 120 >>> ) and last; >>> >>> } >>> You can debug it like this >>> foreach $h (@{$hosts}) >>> { >>> $obj = $type->SUPER::new(PeerAddr => ($h), >>> PeerPort => 110, >>> Proto => 'tcp', >>> LocalPort => 110, >>> Timeout => 120 >>> If (defined ($obj)) { >>> Print "ok"; >>> } >>> Else { >>> Print "bad"; >>> } >>> ) and last; >>> } >>> >>> According to this ,you can check it whether every time it will be 'ok' or >>> not. >>> If the last time is output 'bad', then you can find the real reason >>> >>> If still have any question,please contact with me/ >>> >>> luke >>> >>> -----邮件原件----- >>> 发件人: Nguyen Vu Hung [mailto:[EMAIL PROTECTED] >>> 发送时间: 2007年8月16日 8:58 >>> 收件人: modperl@perl.apache.org >>> 主题: Class inheritance, and SUPER under mod_perl2 >>> >>> Hello all, >>> >>> I am quite new to Perl, mod_perl and mod_perl2 so please excuse me for >>> my questions. It my sounds noobish. >>> >>> In the code below, the class XXX:YYY3 inherits Net::Cmd, >>> IO::Socket::Inet, create an object $obj with the SUPER keyword. >>> >>> As far as I know, this code works well under Apache 1.3, Perl 5.6, >>> mod_perl 1.3. >>> >>> But in current environment which consists Apache 2.0.52, Perl 5.8, >>> mod_perl 2.0.3, $obj becomes undefined (!!) after it is called with SUPER. >>> >>> Anyone gets any clues? >>> >>> Here is the code: >>> >>> ------------------ >>> >>> package XXX::YYY3; >>> >>> @ISA = qw(Net::Cmd IO::Socket::INET); >>> >>> sub new >>> { >>> my $self = shift; >>> my $type = ref($self) || $self; >>> >>> my $hosts = "localhost"; >>> my $obj; >>> my @localport = (); >>> >>> my $h; >>> foreach $h (@{$hosts}) >>> { >>> $obj = $type->SUPER::new(PeerAddr => ($h), >>> PeerPort => 110, >>> Proto => 'tcp', >>> LocalPort => 110, >>> Timeout => 120 >>> ) and last; >>> } >>> >>> >>> # obj is undefined now. why? >>> unless ( defined $obj ) { >>> $sl->log_serror(__FILE__, __LINE__, Apache2::Const::LOG_ERR, >>> APR::Const::SUCCESS, "XXX:: undef obj! ERROR. "); >>> } >>> >>> # vuhung >>> # ref: http://www.perlmonks.org/?node_id=495975 >>> return undef >>> unless defined $obj; >>> >>> } >>> >>> >>> >>> >>> >>> >> >> >> > > > >