[32518] in Perl-Users-Digest

home help back first fref pref prev next nref lref last post

Perl-Users Digest, Issue: 3783 Volume: 11

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Tue Sep 25 00:09:23 2012

Date: Mon, 24 Sep 2012 21:09:09 -0700 (PDT)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)

Perl-Users Digest           Mon, 24 Sep 2012     Volume: 11 Number: 3783

Today's topics:
    Re: Can't find a syntax error, hoping a second set of e <jwcarlton@gmail.com>
    Re: Can't find a syntax error, hoping a second set of e <jwcarlton@gmail.com>
    Re: Can't find a syntax error, hoping a second set of e <peter@makholm.net>
    Re: Can't find a syntax error, hoping a second set of e <marc.girod@gmail.com>
    Re: Can't find a syntax error, hoping a second set of e <anotheranne@nowhere.com>
    Re: Can't find a syntax error, hoping a second set of e <anotheranne@nowhere.com>
    Re: Can't find a syntax error, hoping a second set of e <ben@morrow.me.uk>
    Re: Can't find a syntax error, hoping a second set of e <ben@morrow.me.uk>
    Re: Can't find a syntax error, hoping a second set of e <ben@morrow.me.uk>
    Re: Can't find a syntax error, hoping a second set of e <sbryce@scottbryce.com>
    Re: Can't find a syntax error, hoping a second set of e <ben@morrow.me.uk>
    Re: Can't find a syntax error, hoping a second set of e <uri@stemsystems.com>
    Re: Can't find a syntax error, hoping a second set of e <jwcarlton@gmail.com>
    Re: Can't find a syntax error, hoping a second set of e <jwcarlton@gmail.com>
    Re: Can't find a syntax error, hoping a second set of e <jwcarlton@gmail.com>
    Re: Can't find a syntax error, hoping a second set of e <jimsgibson@gmail.com>
        exporting methods when than one package in a file? <bugbear@trim_papermule.co.uk_trim>
    Re: exporting methods when than one package in a file? <rweikusat@mssgmbh.com>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

----------------------------------------------------------------------

Date: Mon, 24 Sep 2012 02:28:11 -0700 (PDT)
From: Jason C <jwcarlton@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <2196557d-eb8c-43c1-8bf1-183e42bca10e@googlegroups.com>

On Monday, September 24, 2012 1:03:03 AM UTC-4, Ben Morrow wrote:
> 
> > while ($text =~ #<a[^>]* href=(["'])*[^\1>]*\1[^>]*?>(.*?)</a>#gsi) {
>                  ^^ m
> 
> (I would suggest finding a highlighting editor. It makes this sort of
> syntactic mistake much easier to spot.)

Thanks, Ben. I didn't realize the m//; was required; since you can change the delimiter with s/// ad hoc, I thought you could here, too.

I'm using Notepad++, and while it helps me catch opening and ending brackets, it didn't do a lot in recognizing syntax errors (at least, not that I know of). What editor do you recommend?


------------------------------

Date: Mon, 24 Sep 2012 02:35:19 -0700 (PDT)
From: Jason C <jwcarlton@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <c87d2fe7-3ffa-4d19-aed2-6dece71a05f4@googlegroups.com>

On Monday, September 24, 2012 1:23:40 AM UTC-4, Uri Guttman wrote:

> why do you think the # marks the start of a regex? only if you use m//
> can you change the regex delim from /.

Thanks to you, too, Uri. Like I replied to Ben a second ago, I thought that=
 since you could replace the delimiter in s/// ad hoc, that you could in m/=
/, too. Learn something new every day! :-)


> and ^ will not invert a char class for \1 as \1 isn't a char class
> element. so even if you fix the regex delim, that will fail.

Oh. Now THAT I did NOT know at all! It does explain a few other errors I've=
 had, though, and couldn't figure out.


> finally,
> why are you parsing out urls with a regex when there are modules that do
> it correctly?

Two reasons:

1. I've been working with regex for a year or two, and while it's by no mea=
ns a strong point in my vocabulary (yet), I'm at least familiar enough with=
 it to usually figure it out.

2. I briefly looked for a module that would handle this correctly, but wasn=
't sure what to look for. And, I'm not sure that it warrants the including =
of a full module if it could potentially be done in a simple regex. If you =
can recommend a module that would be more stable and/or faster than what I'=
m doing, though, then I would definitely appreciate the reference!

FWIW, this modification did work:

while ($text =3D~ m#(<a[^>]* href=3D["'].*?["'].*?>)(.*?)(</a>)#gsi) {
  $pattern =3D $1$2$3;
  $repl =3D $2;

  if ($2 =3D~ /^http/i) {
    $text =3D~ s/$pattern/$repl/gsi;
  }
}

Admittedly, I'm not sure why $2 is stored long enough for the if() statemen=
t, but inside of the if() statement it's empty. Storing them to a different=
 variable worked for this purpose, but if there's a better way, I'm very mu=
ch open to it.


------------------------------

Date: Mon, 24 Sep 2012 11:49:31 +0200
From: Peter Makholm <peter@makholm.net>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <87haqn3g44.fsf@vps1.hacking.dk>

Jason C <jwcarlton@gmail.com> writes:

>> > while ($text =~ #<a[^>]* href=(["'])*[^\1>]*\1[^>]*?>(.*?)</a>#gsi) {
>>                  ^^ m
>
> Thanks, Ben. I didn't realize the m//; was required; since you can
> change the delimiter with s/// ad hoc, I thought you could here, too.

You can change the delimiter, but the m is only optional when you use
the // delimiters.

//Makholm


------------------------------

Date: Mon, 24 Sep 2012 03:30:37 -0700 (PDT)
From: Marc Girod <marc.girod@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <85522e66-645f-4dbf-8ee4-2ff5259ec6f9@r4g2000vbn.googlegroups.com>

On Sep 24, 10:28=A0am, Jason C <jwcarl...@gmail.com> wrote:

> What editor do you recommend?

GNU emacs with cperl-mode

Marc


------------------------------

Date: Mon, 24 Sep 2012 12:19:23 +0000 (UTC)
From: anotheranne <anotheranne@nowhere.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <k3pj2c$dbn$1@news.albasani.net>

Jason C wrote:

> Can someone look at this and tell me what I'm messing up? I've been coding all night, and my eyes have gone fuzzy :-)
>
> while ($text =~ #<a[^>]* href=(["'])*[^\1>]*\1[^>]*?>(.*?)</a>#gsi) {
>   if ($2 =~ /^http/i) {
>     $text =~ s#<a[^>]*? href=(["'])*([^\1>]*)\1[^>]*?>(.*?)</a>#$2#gsi;
>   }
> }

Whatever other errors your regex may have, I would suggest that
you stick with the regular m// and s/// constructs. You should of
course then escape the '/' in </a> . Changing this should make it run.

Don't use # as an eye-easy replacement for / because a) it is the perl
character for a comment, and b) in a regex (at least with the /x
modifier) it is also a metacharacter.  Trouble will come your way if
you use this.

If you do want to get away from // and /// then use balanced
delimiters like m{} and s{}{} . See p319 in Friedl MASTERING REGULAR
EXPRESSIONS. O'Reilly.

When use use any alternate to m// the m is then mandatory. Only when
using // can you omit the m. thus // or m{} are valid constructs.

Also you can remove the ';' after the gsi

hope this helps.

anotheranne
>
> The error is on the while() line (at least, I remove it and no more error). The error just says:
>
> syntax error at blah.cgi line 239, near "if"
> syntax error at blah.cgi line 246, near "}"
>
> The purpose of the function is to remove the <a href=...></a> code in submitted text, but only if the linked text begins with http.
>
> TIA,
>
> Jason



------------------------------

Date: Mon, 24 Sep 2012 12:42:09 +0000 (UTC)
From: anotheranne <anotheranne@nowhere.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <k3pkf0$gk3$1@news.albasani.net>

Jason C wrote:

> On Monday, September 24, 2012 1:03:03 AM UTC-4, Ben Morrow wrote:
>> 
>> > while ($text =~ #<a[^>]* href=(["'])*[^\1>]*\1[^>]*?>(.*?)</a>#gsi) {
>>                  ^^ m
>> 
>> (I would suggest finding a highlighting editor. It makes this sort of
>> syntactic mistake much easier to spot.)
>
> Thanks, Ben. I didn't realize the m//; was required; since you can change the delimiter with s/// ad hoc, I thought you could here, too.
>
> I'm using Notepad++, and while it helps me catch opening and ending brackets, it didn't do a lot in recognizing syntax errors (at least, not that I know of). What editor do you recommend?

Padre is a nice perl IDE.

http://padre.perlide.org/

anotheranne


------------------------------

Date: Mon, 24 Sep 2012 15:37:47 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <rq76j9-b0p.ln1@anubis.morrow.me.uk>


Quoth Peter Makholm <peter@makholm.net>:
> Jason C <jwcarlton@gmail.com> writes:
> 
> >> > while ($text =~ #<a[^>]* href=(["'])*[^\1>]*\1[^>]*?>(.*?)</a>#gsi) {
> >>                  ^^ m
> >
> > Thanks, Ben. I didn't realize the m//; was required; since you can
> > change the delimiter with s/// ad hoc, I thought you could here, too.
> 
> You can change the delimiter, but the m is only optional when you use
> the // delimiters.

Or ??, but that has special semantics.

Ben



------------------------------

Date: Mon, 24 Sep 2012 15:53:15 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <rn86j9-b0p.ln1@anubis.morrow.me.uk>


Quoth anotheranne <anotheranne@nowhere.com>:
> Jason C wrote:
> 
> > Can someone look at this and tell me what I'm messing up? I've been
> coding all night, and my eyes have gone fuzzy :-)
> >
> > while ($text =~ #<a[^>]* href=(["'])*[^\1>]*\1[^>]*?>(.*?)</a>#gsi) {
> >   if ($2 =~ /^http/i) {
> >     $text =~ s#<a[^>]*? href=(["'])*([^\1>]*)\1[^>]*?>(.*?)</a>#$2#gsi;
> >   }
> > }
> 
> Whatever other errors your regex may have, I would suggest that
> you stick with the regular m// and s/// constructs. You should of
> course then escape the '/' in </a> . Changing this should make it run.

That's a bad idea. Perl has changable delimiters for a reason: to avoid
huge unreadable nests of /\/\\/.

> Don't use # as an eye-easy replacement for / because a) it is the perl
> character for a comment, and b) in a regex (at least with the /x
> modifier) it is also a metacharacter.  Trouble will come your way if
> you use this.

Nonsense. Perl is perfectly capable of getting this right.

> Also you can remove the ';' after the gsi

 ...but that would probably also be a bad idea.

Ben



------------------------------

Date: Mon, 24 Sep 2012 15:48:28 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <se86j9-b0p.ln1@anubis.morrow.me.uk>


Quoth Jason C <jwcarlton@gmail.com>:
> On Monday, September 24, 2012 1:23:40 AM UTC-4, Uri Guttman wrote:
> 
> > finally,
> > why are you parsing out urls with a regex when there are modules that do
> > it correctly?
> 
> Two reasons:
> 
> 1. I've been working with regex for a year or two, and while it's by no
> means a strong point in my vocabulary (yet), I'm at least familiar
> enough with it to usually figure it out.
> 
> 2. I briefly looked for a module that would handle this correctly, but
> wasn't sure what to look for.

HTML::LinkExtor, probably, depending on what you're trying to do.
Perhaps one of the other HTML::Parser-based modules.

> FWIW, this modification did work:
> 
> while ($text =~ m#(<a[^>]* href=["'].*?["'].*?>)(.*?)(</a>)#gsi) {
>   $pattern = $1$2$3;
              ^^    ^^
I think not...

>   $repl = $2;
> 
>   if ($2 =~ /^http/i) {
>     $text =~ s/$pattern/$repl/gsi;

This almost certainly doesn't do what you think. If nothing else, you
want to \Q $pattern. What are you trying to do here: strip tags? Why not
just do one s/// (or, you know, use a module)?

>   }
> }
> 
> Admittedly, I'm not sure why $2 is stored long enough for the if()
> statement, but inside of the if() statement it's empty. Storing them to
> a different variable worked for this purpose, but if there's a better
> way, I'm very much open to it.

The $N variables last until the next successful pattern match. In this
case, the '$2 =~ /^http/i' in the condition of the if clears them all
(even though it doesn't capture anything).

In general I prefer to assign captures to real variables right away:

    while (my ($tag, $url) = m#(<a...>(.*?)</a>)#gsi) {

(notice also that captures can be nested, and DTRT).

Ben



------------------------------

Date: Mon, 24 Sep 2012 09:11:20 -0600
From: Scott Bryce <sbryce@scottbryce.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <k3pt71$shn$1@dont-email.me>

On 9/24/2012 3:28 AM, Jason C wrote:
> I'm using Notepad++,

I assume that means you are on a Windows box.

> What editor do you recommend?

I like UltraEdit.




------------------------------

Date: Mon, 24 Sep 2012 17:54:04 +0100
From: Ben Morrow <ben@morrow.me.uk>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <cqf6j9-hqp.ln1@anubis.morrow.me.uk>


Quoth Jason C <jwcarlton@gmail.com>:
> > 
> > (I would suggest finding a highlighting editor. It makes this sort of
> > syntactic mistake much easier to spot.)
> 
> I'm using Notepad++, and while it helps me catch opening and ending
> brackets, it didn't do a lot in recognizing syntax errors (at least, not
> that I know of). What editor do you recommend?

Personally I use Vim, which runs on Unix/Mac/Windows, but it takes a
little getting used to. The GUI version (which is probably what you
would use on Windows) has menus and mouse support as you would expect,
and there is an 'easy' mode which makes it behave more like a
Windows-style point-and-type editor, but I'm not sure I see the point of
using a programmer's editor if you're not going to learn to use it
properly.

Ben



------------------------------

Date: Mon, 24 Sep 2012 15:43:42 -0400
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <87lifzmck1.fsf@stemsystems.com>

>>>>> "JC" == Jason C <jwcarlton@gmail.com> writes:

  JC> On Monday, September 24, 2012 1:23:40 AM UTC-4, Uri Guttman wrote:
  >> why do you think the # marks the start of a regex? only if you use m//
  >> can you change the regex delim from /.

  JC> Thanks to you, too, Uri. Like I replied to Ben a second ago, I
  JC> thought that since you could replace the delimiter in s/// ad hoc,
  JC> that you could in m//, too. Learn something new every day! :-)

but s/// has the s to mark the next char. =~ ## has no leading marker so it
would just be a comment. also using # for the delimiter is just a bad
idea as it confuses many readers.

  >> finally,
  >> why are you parsing out urls with a regex when there are modules that do
  >> it correctly?

  JC> Two reasons:

  JC> 1. I've been working with regex for a year or two, and while it's
  JC> by no means a strong point in my vocabulary (yet), I'm at least
  JC> familiar enough with it to usually figure it out.

good that you are studying them but it still is the wrong tool for
this. learning when regexes aren't a good solution is part of learning
regexes.

  JC> 2. I briefly looked for a module that would handle this correctly,
  JC> but wasn't sure what to look for. And, I'm not sure that it
  JC> warrants the including of a full module if it could potentially be
  JC> done in a simple regex. If you can recommend a module that would
  JC> be more stable and/or faster than what I'm doing, though, then I
  JC> would definitely appreciate the reference!

  JC> FWIW, this modification did work:

  JC> while ($text =~ m#(<a[^>]* href=["'].*?["'].*?>)(.*?)(</a>)#gsi) {

it will fail if the opening quote is " and the string has a ' inside
it. perfectly legal html but you can't parse it that way.

  JC> Admittedly, I'm not sure why $2 is stored long enough for the if()
  JC> statement, but inside of the if() statement it's empty. Storing
  JC> them to a different variable worked for this purpose, but if
  JC> there's a better way, I'm very much open to it.

you need to read more about regexes and the $1 stuff. they live until
the next regex is run (they are global).

uri


------------------------------

Date: Mon, 24 Sep 2012 17:54:33 -0700 (PDT)
From: Jason C <jwcarlton@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <6242d25b-5792-4975-8d5a-f8edbbb0ad95@googlegroups.com>

On Monday, September 24, 2012 11:03:04 AM UTC-4, Ben Morrow wrote:
> > FWIW, this modification did work:
> > 
> > while ($text =~ m#(<a[^>]* href=["'].*?["'].*?>)(.*?)(</a>)#gsi) {
> >   $pattern = $1$2$3;
>               ^^    ^^
> I think not...

Blah, sorry; that's what I get for trying to type of dummy code at 5am. In practice, I put it in quotes:

$pattern = "$1$2$3";


> >   if ($2 =~ /^http/i) {
> >     $text =~ s/$pattern/$repl/gsi;
> 
> This almost certainly doesn't do what you think. If nothing else, you
> want to \Q $pattern.

Excellent point about \Q. What do you mean, though, that it doesn't do what I think?


> What are you trying to do here: strip tags?

Yes and no. I'm using a contenteditable instead of a textarea, and I've discovered that when someone copy-and-pastes an URL from Chrome or FF, it's automatically making the URL a link. Eg:

<a href="http://www.google.com">http://www.google.com</a>

But of course, if you just type the address, then it doesn't. So on my end, I was using URI::Find to convert addresses to links, and ending up with a mess like:

<a href="<a href="http://www.google.com">http://www.google.com</a>"><a href="http://www.google.com">http://www.google.com</a></a>

So, my goal here is to remove the <a href> tag, but only if the linked text is an URL.


> Why not
> just do one s/// (or, you know, use a module)?

I had originally tried doing it with a simple s///, but couldn't figure out how to make it conditional. Like this:

$text =~ s#<a[^>]*? href=(["'])*([^\1>]*)\1[^>]*?>(.*?)</a>#$2#gsi
  if ($3 =~ /^http/i);

This worked correctly if I removed the if() statement. In testing, I changed the replacement to:

1 - $1, 2 - $2, 3 - $3

just to make sure that $3 did begin with http, and it did, so I couldn't figure out why the if() wasn't catching it unless it was dropping the $3 value before reaching the if().


> > Admittedly, I'm not sure why $2 is stored long enough for the if()
> > statement, but inside of the if() statement it's empty. Storing them to
> > a different variable worked for this purpose, but if there's a better
> > way, I'm very much open to it.
> 
> The $N variables last until the next successful pattern match. In this
> case, the '$2 =~ /^http/i' in the condition of the if clears them all
> (even though it doesn't capture anything).

Ahh, that makes sense. I mistakenly thought that, since I wasn't assigning $N, then they would retain the previous value.


> In general I prefer to assign captures to real variables right away:
> 
>     while (my ($tag, $url) = m#(<a...>(.*?)</a>)#gsi) {
> 
> (notice also that captures can be nested, and DTRT).

Great to know! Thanks.


------------------------------

Date: Mon, 24 Sep 2012 17:56:33 -0700 (PDT)
From: Jason C <jwcarlton@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <dc778305-3adf-4595-985d-dcf4ae7bc0c7@googlegroups.com>

On Monday, September 24, 2012 11:03:04 AM UTC-4, Ben Morrow wrote:

>     while (my ($tag, $url) = m#(<a...>(.*?)</a>)#gsi) {

In this, how does it know that we're testing $test? Or, did you mean to type something like:

while (my (tag, $url) = $text =~ m#(<a...>(.*?)</a>)#gsi)


------------------------------

Date: Mon, 24 Sep 2012 18:04:17 -0700 (PDT)
From: Jason C <jwcarlton@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <6d53b708-9e94-4bc9-8707-d9a130b2da2c@googlegroups.com>

On Monday, September 24, 2012 3:44:44 PM UTC-4, Uri Guttman wrote:

>   JC> while ($text =~ m#(<a[^>]* href=["'].*?["'].*?>)(.*?)(</a>)#gsi) {
> 
> it will fail if the opening quote is " and the string has a ' inside
> it. perfectly legal html but you can't parse it that way.

I'll probably discard this idea and pursue a module, like you guys suggested. But for the sake of learning...

I recognized this issue, too, which is why I was originally using [^\1], like so:

(["'])*([^\1>]*)\1

I think it was you that pointed out that I can't negate a backreference like that, though.

What would be the correct way to do this, if I can't negate a backreference as a character class?


------------------------------

Date: Mon, 24 Sep 2012 18:26:32 -0700
From: Jim Gibson <jimsgibson@gmail.com>
Subject: Re: Can't find a syntax error, hoping a second set of eyes will help
Message-Id: <240920121826328708%jimsgibson@gmail.com>

In article <6d53b708-9e94-4bc9-8707-d9a130b2da2c@googlegroups.com>,
Jason C <jwcarlton@gmail.com> wrote:

> On Monday, September 24, 2012 3:44:44 PM UTC-4, Uri Guttman wrote:
> 
> >   JC> while ($text =~ m#(<a[^>]* href=["'].*?["'].*?>)(.*?)(</a>)#gsi) {
> > 
> > it will fail if the opening quote is " and the string has a ' inside
> > it. perfectly legal html but you can't parse it that way.
> 
> I'll probably discard this idea and pursue a module, like you guys suggested.
> But for the sake of learning...
> 
> I recognized this issue, too, which is why I was originally using [^\1], like
> so:
> 
> (["'])*([^\1>]*)\1
> 
> I think it was you that pointed out that I can't negate a backreference like
> that, though.
> 
> What would be the correct way to do this, if I can't negate a backreference as a character class?

Capture the leading delimiter and use a backreference that is not in a
character class:

  while ($text =~ m{(<a[^>]* href=(["']).*?\2.*?>)(.*?)(</a>)}gsi) {
                                           ^^

-- 
Jim Gibson


------------------------------

Date: Mon, 24 Sep 2012 11:39:53 +0100
From: bugbear <bugbear@trim_papermule.co.uk_trim>
Subject: exporting methods when than one package in a file?
Message-Id: <Hvydnd4RacLkpf3NnZ2dnUVZ7r6dnZ2d@brightview.co.uk>

I am building a small object oriented class set; most of the methods
apply to an instance, and I can handle these OK.

However, some of the classes supply class (or global) functions.

Since none of the classes are large, I would like the whole
class set to be in a single file.

Question; what is the best way that I can:

* make sure each global function is available throughout
the source file?

* export (EXPORT!) all the global functions
when the class set is "used" ?

  BugBear


------------------------------

Date: Mon, 24 Sep 2012 12:43:14 +0100
From: Rainer Weikusat <rweikusat@mssgmbh.com>
Subject: Re: exporting methods when than one package in a file?
Message-Id: <87r4prr6i5.fsf@sapphire.mobileactivedefense.com>

bugbear <bugbear@trim_papermule.co.uk_trim> writes:
> I am building a small object oriented class set; most of the methods
> apply to an instance, and I can handle these OK.
>
> However, some of the classes supply class (or global) functions.
>
> Since none of the classes are large, I would like the whole
> class set to be in a single file.
>
> Question; what is the best way that I can:
>
> * make sure each global function is available throughout
> the source file?
>
> * export (EXPORT!) all the global functions
> when the class set is "used" ?

You could add them all to the @EXPORT array. But if they're really
'class methods' I think you should be calling them like class methods,
that is, by either using an object of the proper class or the name of
it on the left side of a ->. When a subroutine is exported, what
really happens is that the coderef currently assigned to the
subroutine slot of the glob in question is assigned to the subroutine
slot of another glob. But since Perl is a dynamic language the
association between the original glob and the original coderef isn't
necessarily permanent: Any method could redefine any other method by
assigning a different coderef to the corresponding glob and such
changes will become visible to users of the class when they use
proper method calls to invoke methods but not if they import methods
as subroutines instead.


------------------------------

Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin) 
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>


Administrivia:

To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.

Back issues are available via anonymous ftp from
ftp://cil-www.oce.orst.edu/pub/perl/old-digests. 

#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.


------------------------------
End of Perl-Users Digest V11 Issue 3783
***************************************


home help back first fref pref prev next nref lref last post