Re: ??: ??: Class inheritance, and SUPER under mod_perl2
Joe Schaefer : Nguyen Vu Hung [EMAIL PROTECTED] writes: foreach $h (@{$hosts}) { $obj = $type-SUPER::new(PeerAddr = ($host = $h), Are you sure you want SUPER::new()? I think in your case it translates to Net::Cmd::new(), when your args suggest you want IO::Socket::INET::new(). It won't work. I don't know the reason but because $obj inherits from 02 classes, not only Net::Cmd::new PeerPort = 110, #$arg{PeerPort} || 110,#(110)', Proto = 'tcp', LocalPort = 110, You can't bind to LocalPort 110 unless you are root. Try doing without the LocalPort = 110 argument, there's probably no need for it. I finally gave you and pended this issue. At the moment, I am hardcoding all the parameters, and it works well :D. BR, Vu Hung
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; }
Re: 答复: 答复: 答复: Class inheritance, and SUPER under mod_perl2
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; }
Re: 答复: 答复: Class inheritance, and SUPER under mod_perl2
Nguyen Vu Hung [EMAIL PROTECTED] writes: 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}) Are you using symrefs or something? $hosts here is a scalar, not an arrayref. Are you sure the loop is being entered at all? -- Joe Schaefer
Re: ??: ??: Class inheritance , and SUPER under mod_perl2
Joe Schaefer : Nguyen Vu Hung [EMAIL PROTECTED] writes: 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}) Are you using symrefs or something? It seems that I am using symref. Please see the cose below ( more original - The code I have posted in the previous emails are slight modified, by me, so it may contains errors! ) $hosts here is a scalar, not an arrayref. Yes, I changed my code. Please see below. Are you sure the loop is being entered at all? Yes, because the log inisde the foreach loop was printed out. 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 $host = shift if @_ % 2; my %arg = @_; my $hosts = defined $host ? [ $host ] : $NetConfig{pop3_hosts}; my $obj; my @localport = exists $arg{ResvPort} ? ( LocalPort = $arg{ResvPort} ): (); my $h; foreach $h (@{$hosts}) { $obj = $type-SUPER::new(PeerAddr = ($host = $h), PeerPort = 110, #$arg{PeerPort} || 110,#(110)', Proto = 'tcp', LocalPort = 110, Timeout = 120 #defined $arg{Timeout} );# and last; #last:?? # printed:undef - i.e, $obj is undefined at this moment. unless ( defined $obj ) { $sl-log_serror(__FILE__, __LINE__, Apache2::Const::LOG_ERR, APR::Const::SUCCESS, xpop3:: undef obj! ERROR. ); } last; } } # printed:undef - i.e, $obj is undefined at this moment. unless ( defined $obj ) { $sl-log_serror(__FILE__, __LINE__, Apache2::Const::LOG_ERR, APR::Const::SUCCESS, xpop3:: undef obj! ERROR. ); }
Re: ??: ??: Class inheritance, and SUPER under mod_perl2
Nguyen Vu Hung [EMAIL PROTECTED] writes: foreach $h (@{$hosts}) { $obj = $type-SUPER::new(PeerAddr = ($host = $h), Are you sure you want SUPER::new()? I think in your case it translates to Net::Cmd::new(), when your args suggest you want IO::Socket::INET::new(). PeerPort = 110, #$arg{PeerPort} || 110,#(110)', Proto = 'tcp', LocalPort = 110, You can't bind to LocalPort 110 unless you are root. Try doing without the LocalPort = 110 argument, there's probably no need for it. -- Joe Schaefer
Re: Class inheritance, and SUPER under mod_perl2
On 8/15/07, Nguyen Vu Hung [EMAIL PROTECTED] wrote: 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. I don't think this is related to SUPER, since mod_perl doesn't affect that. You can confirm this by hard-coding the name of the superclass instead of the word SUPER, e.g. $obj = $type-IO::Socket::INET::new( ...etc... - Perrin