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

Reply via email to