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

Reply via email to