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; >> >> } >> >> >> >> >> > > > >