Re: ??: ??: Class inheritance, and SUPER under mod_perl2

2007-08-20 Thread Nguyen Vu Hung

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

2007-08-15 Thread Nguyen Vu Hung
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

2007-08-15 Thread Nguyen Vu Hung
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

2007-08-15 Thread 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? $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

2007-08-15 Thread Nguyen Vu Hung

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

2007-08-15 Thread 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().

 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

2007-08-15 Thread Perrin Harkins
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