Re: exporting Constants

2002-11-22 Thread david
Tom Allison wrote:

> How do I export a Constant from a module?
> 
> Test.pm:
> 
> package Test;
> 
> @EXPORT_OK = qw(__what__);
> use constant FOO => 123;
> 

name the following Test.pm:

#!/usr/bin/perl -w
use strict;

package Test;

use Exporter;
our @EXPORT_OK = qw(HI);

use constant HI => 'Hi I am a constant in Test.pm';

1;

__END__

name the following test.pl:

#!/usr/bin/perl -w
use strict;

use Test qw(HI);

print TEST::HI,"\n";

__END__

prints:

Hi I am a constant in Test.pm

that's what you want right?

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread Tanton Gibbs
Will print HI; not work...you would think you wouldn't have to qualify it if
you import it into your namespace?
- Original Message -
From: "david" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 3:32 PM
Subject: Re: exporting Constants


> Tom Allison wrote:
>
> > How do I export a Constant from a module?
> >
> > Test.pm:
> >
> > package Test;
> >
> > @EXPORT_OK = qw(__what__);
> > use constant FOO => 123;
> >
>
> name the following Test.pm:
>
> #!/usr/bin/perl -w
> use strict;
>
> package Test;
>
> use Exporter;
> our @EXPORT_OK = qw(HI);
>
> use constant HI => 'Hi I am a constant in Test.pm';
>
> 1;
>
> __END__
>
> name the following test.pl:
>
> #!/usr/bin/perl -w
> use strict;
>
> use Test qw(HI);
>
> print TEST::HI,"\n";
>
> __END__
>
> prints:
>
> Hi I am a constant in Test.pm
>
> that's what you want right?
>
> david
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread david
Tanton Gibbs wrote:

> Will print HI; not work...you would think you wouldn't have to qualify it
> if you import it into your namespace?

the statement: 

print HI;

won't work. it's:

print Test::HI,"\n";

that i have in the code. Otherwise, Perl thinks that you want to print $_ to 
the HI file handle.

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread Tanton Gibbs
Ah, then what about
print HI, "\n";

the comma should disambiguate from a filehandle, right?
- Original Message -
From: "david" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 4:02 PM
Subject: Re: exporting Constants


> Tanton Gibbs wrote:
>
> > Will print HI; not work...you would think you wouldn't have to qualify
it
> > if you import it into your namespace?
>
> the statement:
>
> print HI;
>
> won't work. it's:
>
> print Test::HI,"\n";
>
> that i have in the code. Otherwise, Perl thinks that you want to print $_
to
> the HI file handle.
>
> david
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread david
Tanton Gibbs wrote:

> Ah, then what about
> print HI, "\n";
> 

no. sorry! :-(

in that case, Perl probably thinks that you want to call the function HI and 
than print whatever that function return to STDOUT.

no such HI function so Perl will panic! :-)

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread Tanton Gibbs
Huh?  I thought constants were implemented as functions?  In other words, HI
and HI() should both refer to the same entity.
- Original Message -
From: "david" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 4:06 PM
Subject: Re: exporting Constants


> Tanton Gibbs wrote:
>
> > Ah, then what about
> > print HI, "\n";
> >
>
> no. sorry! :-(
>
> in that case, Perl probably thinks that you want to call the function HI
and
> than print whatever that function return to STDOUT.
>
> no such HI function so Perl will panic! :-)
>
> david
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread david
Tanton Gibbs wrote:

> Huh?  I thought constants were implemented as functions?  In other words,
> HI and HI() should both refer to the same entity.

true. but not in the your current namespace.

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread Tanton Gibbs
Sure it is, because you imported it from Test...I tried the following
example and it worked fine

#In file THGTest.pm

package THGTest;
use Exporter;

our @ISA=qw(Exporter);
our @EXPORT_OK=qw(HI);

use constant HI => 'Hi, I am a constant.'

#in file test.pl
use THGTest qw(HI);

print HI, "\n";

Two notes:
1.) In your original example, you didn't have the @ISA, which IIRC, is
necessary
2.) You should never create a Test.pm because perl already comes with
Test.pm

Tanton
- Original Message -
From: "david" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 4:13 PM
Subject: Re: exporting Constants


> Tanton Gibbs wrote:
>
> > Huh?  I thought constants were implemented as functions?  In other
words,
> > HI and HI() should both refer to the same entity.
>
> true. but not in the your current namespace.
>
> david
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread Tanton Gibbs
oops, left off a ; and a 1;

corrections below.
- Original Message - 
From: "Tanton Gibbs" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 4:44 PM
Subject: Re: exporting Constants


> Sure it is, because you imported it from Test...I tried the following
> example and it worked fine
> 
> #In file THGTest.pm
> 
> package THGTest;
> use Exporter;
> 
> our @ISA=qw(Exporter);
> our @EXPORT_OK=qw(HI);
> 
> use constant HI => 'Hi, I am a constant.'
should be 
use constant HI => 'Hi, I am a constant.';

1;
> 
> #in file test.pl
> use THGTest qw(HI);
> 
> print HI, "\n";
> 
> Two notes:
> 1.) In your original example, you didn't have the @ISA, which IIRC, is
> necessary
> 2.) You should never create a Test.pm because perl already comes with
> Test.pm
> 
> Tanton
> ----- Original Message -----
> From: "david" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Friday, November 22, 2002 4:13 PM
> Subject: Re: exporting Constants
> 
> 
> > Tanton Gibbs wrote:
> >
> > > Huh?  I thought constants were implemented as functions?  In other
> words,
> > > HI and HI() should both refer to the same entity.
> >
> > true. but not in the your current namespace.
> >
> > david
> >
> > --
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread david
Tanton Gibbs wrote:

> Sure it is, because you imported it from Test...I tried the following

No, you can call (or use the constant) it without full qualifying it doens't 
mean the function or the constant is in your namespace. as you said below, 
Perl has way of finding it from the Exporter interface. the function or 
constant still belongs to the package it's defined. when you import 
something, it only makes it available for you to use in your script. you 
don't need to fully qualify it because you said you are an 
Exporter(@ISA=qw(Exporter)). I don't use Exporter so I fully qualify it.

how about a little experiment?

#!/usr/bin/perl -w
use strict;

use THGTest qw(HI); #-- See I learn not to use Test :-) Thanks!

print "$_: $::{$_}\n" for(keys %::);

#--
#-- Now do this:
#--
print "$_: $THGTest::{$_}\n" for(keys %THGTest::);

__END__

for the first for(...):
see if you can find HI anywhere. You won't find it because it's not there! 
You still can use it but it doesn't belong to you.

for the second for(...):
you will see something like:
HI: *Model::HI

btw, @ISA=qw(Exporter) is not strictly neccessary but pretty much everyone 
agree it's a good thing to do for the reason mentioned above...

david

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: exporting Constants

2002-11-22 Thread Tanton Gibbs
Ah, I see the difference now.

I didn't realize that you could still do the export without being an
exporter.  With that distinction I understand.  HI is actually put into the
namespace if you are an exporter...if you are not, then HI remains in the
THGTest namespace.  Thanks for all you help in clarifying the issue.

Tanton
- Original Message -
From: "david" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, November 22, 2002 5:12 PM
Subject: Re: exporting Constants


> Tanton Gibbs wrote:
>
> > Sure it is, because you imported it from Test...I tried the following
>
> No, you can call (or use the constant) it without full qualifying it
doens't
> mean the function or the constant is in your namespace. as you said below,
> Perl has way of finding it from the Exporter interface. the function or
> constant still belongs to the package it's defined. when you import
> something, it only makes it available for you to use in your script. you
> don't need to fully qualify it because you said you are an
> Exporter(@ISA=qw(Exporter)). I don't use Exporter so I fully qualify it.
>
> how about a little experiment?
>
> #!/usr/bin/perl -w
> use strict;
>
> use THGTest qw(HI); #-- See I learn not to use Test :-) Thanks!
>
> print "$_: $::{$_}\n" for(keys %::);
>
> #--
> #-- Now do this:
> #--
> print "$_: $THGTest::{$_}\n" for(keys %THGTest::);
>
> __END__
>
> for the first for(...):
> see if you can find HI anywhere. You won't find it because it's not there!
> You still can use it but it doesn't belong to you.
>
> for the second for(...):
> you will see something like:
> HI: *Model::HI
>
> btw, @ISA=qw(Exporter) is not strictly neccessary but pretty much everyone
> agree it's a good thing to do for the reason mentioned above...
>
> david
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]