http://www.perlmonks.org?node_id=1187192


in reply to Re^3: global var
in thread global var

Hi: Don't we all cut and paste from the internet or our own old code or code on CD's that come with textbooks? Yes we do.

use manageusers qw(LoggedOn_user_id);

Software error:

"LoggedOn_user_id" is not exported by the manageusers module
Can't continue after import errors at update_tables-development.cgi line 30
BEGIN failed--compilation aborted at update_tables-development.cgi line 30.

BEGIN { use vars qw($VERSION @ISA @EXPORT); use DBI; # $ENV{DBI_TRACE}=1; # $ENV{PERL_DBI_DEBUG}=1; require Exporter; @ISA = qw(Exporter); # exported functions our @EXPORT_OK = qw( &OpenConnection &OpenSession &ProcessLoginRequest &ProcessLostDataRequest &LoginUser &decodeEncryptedPassName &UpdateUserData &GetUserLostData &LogoutUser &GetUserSessionCookie &CheckForAuthorizedUser &Expires $attempts $adminaccess $LoggedOn_user_id <<<<<<---------------------- &Now &CheckValidLoginChar &CheckValidEmailChar &print_md5_javascript); $VERSION = '0.0.1'; }

Replies are listed 'Best First'.
Re^5: global var
by shmem (Chancellor) on Apr 05, 2017 at 22:22 UTC

    What you are trying to import is not a function.

    - use manageusers qw(LoggedOn_user_id); + use manageusers qw($LoggedOn_user_id);
    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

      Hi:

      Read it was not necessary there. Tried both ways. With $ returns:

      Software error:

      "$GetLoggedOnId" is not exported by the manageusers module
      Can't continue after import errors at update_tables-development.cgi line 30
      BEGIN failed--compilation aborted at update_tables-development.cgi line 30.
      

      Padre also says the function in question is not exported by manageusers.

      our @EXPORT_OK = qw( &OpenConnection &OpenSession &ProcessLoginRequest &ProcessLostDataRequest &LoginUser &GetLoggedOnId <<<<-------------------

      Not posting whole thing to avoid severe criticism from some commenters . etc.

      I have many exported other functions and variables and they all work fine. Some are exported, some are not. OpenConnection is exported works fine. CloseConnection not exported and works fine. Both called manageusers::OpenConnection(); and manageusers::CloseConnection();

      #--------------------------------------------------------------------- +---------- # Database Conection Functions #--------------------------------------------------------------------- +---------- # FUNCTION: OpenConnection() # DESCRIPTION: Connect to the MySQL database #--------------------------------------------------------------------- +---------- sub OpenConnection { my $localtimenow = localtime(Now()); $dbh = DBI->connect($dsn,$sql_username,$sql_password) or ErrorMessage("Could not connect to the database."); warn("Open Connection-JustBefore returning database handle: '$dbh' + Current Time: '$localtimenow'"); return $dbh; } #--------------------------------------------------------------------- +---------- # FUNCTION: CloseConnection # DESCRIPTION: Disconnect from the MySQL database #--------------------------------------------------------------------- +---------- sub CloseConnection { my $localdbh = @_; my $localtimenow = localtime(Now()); if ($localdbh){ $localdbh->disconnect(); } elsif ($dbh) { $dbh->disconnect(); } warn("Close Connection -just before exit Current Time: '$loca +ltimenow'"); # exit(0); }
        Not posting whole thing to avoid severe criticism from some commenters . etc.

        If you avoid criticism, you avoid learning. If you avoid learning, all you ask is to help you out of a fix. I might do that for some time, but not very long. I'm not going to help you over the road everytime you want to go to the bakery.

        That said, in no post of you in this thread which contains that purported BEGIN block from manageusers does this variable show up. Except in this last one. So things are changing, but I won't play a pointless shell game.

        You need not import a variable from another package to use it. You can use it also fully qualified in your code, in this case as $manageusers::GetLoggedOnId - if this variable really exists in that package (who knows? It looks like you don't either). If it doesn't exist there and you use it anyways, it will be created. Will that be of any use? I don't know and won't guess.

        You could, instead of posting the entire fluff here, stick it onto tultalk's scratchpad. Eventually somebody will look over it and tell you what's wrong.

        Padre also says the function in question is not exported by manageusers.

        • use manageusers qw(GetLoggedOnId) imports a function
        • use manageusers qw($GetLoggedOnId) imports a scalar variable
        • use manageusers qw(%GetLoggedOnId) imports a hash variable
        • ...
        perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
Re^5: global var
by stevieb (Canon) on Apr 05, 2017 at 22:01 UTC

    "Don't we all cut and paste from the internet or our own old code or code on CD's that come with textbooks? Yes we do."

    No. We don't. Especially stuff from 2003.

    Things change rapidly in the tech world. You can not build something for today's world using something that came from over a decade ago, no matter what.

    You can not expect something from 2003 to act and behave today like it did then. Even in 2003, the code you've posted was outdated. If you are creating something new, you'll need to get up-to-speed on today's technology. Being an auto-mechanic by trade (but out of the industry for many years), it's like showing an example of a carburetor from a vehicle, while asking for help on a brand new fuel injected, computerized ride. I'm also a licensed residential electrician by trade, and asking about the expansion of aluminum wires in a copper socket in today's world would also be akin.

    Help may come, but with 14 year old code, you're pretty much going to be kicking a dead horse (imho).

    To further, the code you did post was broken horribly, and wouldn't even compile back then. Even on the node I'm replying to, you still close off with a brace where a parens is required.

      Hi again:

      It is not closing off with a brace where a paren is required. The Brace is closing the Begin The paren is closing this: our @EXPORT_OK = qw(

      BEGIN { use vars qw($VERSION @ISA @EXPORT); use DBI; # $ENV{DBI_TRACE}=1; # $ENV{PERL_DBI_DEBUG}=1; require Exporter; @ISA = qw(Exporter); # exported functions our @EXPORT_OK = qw( &OpenConnection &OpenSession &ProcessLoginRequest &ProcessLostDataRequest &LoginUser &decodeEncryptedPassName &UpdateUserData &GetUserLostData &LogoutUser &GetUserSessionCookie &CheckForAuthorizedUser &Expires $attempts $adminaccess $LoggedOn_user_id <<<<<<---------------------- &Now &CheckValidLoginChar &CheckValidEmailChar &print_md5_javascript); $VERSION = '0.0.1'; }

      I also changed $LoggedOn_user_id to a function call &GetLoggedOn_user_id to deliver the number to the other module and it still does not work.

      And yes it compiles then and now.

      Your comments and those of some others are very discouraging to one who is having fun and enjoying this resurrection. A little tolerance is in order I think.

      I realize there is much stuff here that is old and discouraged but it still works.

        I'm one of the more tolerant folk who are around, at least I'd like to think.

        If the code you post sections of can't compile in a short example, perhaps you could post all of it within <readmore></readmore> tags, so we can see all of it.

        It isn't my intention to put anyone off. If I came across that way, I am truly sorry. Given portions of an application that aren't copy/pasted properly into the site here, it is impossible to see what is wrong, especially when it is copy/pasted more than once incorrectly.

        Paste it in within the tags I specified above, and perhaps someone will have the time to figure it out.

      You're using perl, its very old, people still use perls from 14 years ago , so as a general argument that old code is dead code its super weak argument ... but thats completely unrelated to the less than spaghetti code tultalk is trying to polish with little understanding