in reply to Re: •Re: How to use require...
in thread How to use require...

I commented out "use autouse Login => qw(&do_login &do_login2);" and it still works. Am I missing something?
Ahh, you don't need both that and the previous line. That's like wearing both suspenders and a belt.

Comment out the use Login line.

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.

Replies are listed 'Best First'.
Re: •Re: Re: •Re: How to use require...
by kiat (Vicar) on Jan 03, 2004 at 10:59 UTC
    I commented out use Login and only have use autouse Login => qw(&login &login2); and got the error: Undefined subroutine &main::login called at C:/apache/www/index.pl line 87.

    It was okay with use Login uncommented. The code I've is as follows

    ######### index.pl #!C:/perl5.8/bin/perl.exe use strict; use warnings; use diagnostics; use CGI::Carp qw(fatalsToBrowser); use lib 'C:/apache/www/modules'; #use Login; use autouse Edit => qw(&login &login2); my %actions = ( default => \&default, login => \&login, login2 => \&login2 ); # Thanks to fruiture for pointing this out... $query = 'default' unless exists $actions{ $query }; &{ $actions{$query} } sub default { # show default page } ######### Login.pm use strict; use warnings; use diagnostics; use CGI::Carp qw(fatalsToBrowser); sub login { # display login page } sub login2 { # process login } 1;
    Also, I'm wondering why in the Login.pm it doesn't seem I need the usual exporting stuff as follows:
    # The package declaration and the code to # do the exporting are absent in Login.pm # Do I need to put them in? package Login; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(&login &login2);

    Let me know if I've made any blunders :)

      Let's go back to basics. To use autouse, you have to have a module that if you said use Login qw(login), it'd define and export a login() subroutine. Yes, that means you have to use Exporter in the proper fashion. I don't see that there.

      Fix up your Login.pm file to be a proper module. Then try playing with autouse again. Something like:

      ## Login.pm package Login; use base qw(Exporter); @EXPORT_OK = qw(login login2); sub login { ... } sub login2 { ... } 1; ## main: use autouse Login => qw(login login2); ...

      -- Randal L. Schwartz, Perl hacker
      Be sure to read my standard disclaimer if this is a reply.

        Thanks a zillion :)

        I was a little unsure because even though I didn't have the two lines "use base qw(Exporter); @EXPORT_OK = qw(login login2);" in Login.pm, the code still works:

        ## Login.pm package Login; sub login { ... } sub login2 { ... } 1; ## main: use autouse Login => qw(login login2);
        I thought it was something unusual about "autouse" that precluded the need to use Exporter in Login.pm. But now that I've learnt that Login.pm needs to be a proper module, I'll make the change right away :)