Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

Re^4: global var

by tultalk (Monk)
on Apr 06, 2017 at 17:22 UTC ( [id://1187322]=note: print w/replies, xml ) Need Help??

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

Checked out the code you suggested and runs exactly as expected.

Looked at my code, made sure exactly the same for the export and use and it failed exactly as before.

Something is blocking the importing of the data through not exporting the $LoggedOn_user_id.

I set the LoggedOn+user_id to a number to test ant did not import.

Replies are listed 'Best First'.
Re^5: global var
by Marshall (Canon) on Apr 08, 2017 at 03:14 UTC
    I am glad that you ran my code and you see that it works.

    The file should have the "our" declaration of $LoggedON_user_id and this "our" declaration should not appear anywhere else.

    I am not sure what your remaining problem is, but I suspect that the solution will be simple once the problem is fully understood.

    Again, try to make a very, very simple example of the problem. Forget the web server for the moment. Get your script to work from the command line.

    Your "cgi" script doesn't even need to import $LoggedON_user_id as long as it does "use manageusers ();", (which imports nothing), you can still access $manageusers::LoggedON_user_id as long as has something like our $LoggedON_user_id = "default";

      I had tried that first but will try gain.

      In manageuser Removed EXPORT of LoggedON_user_id

      my $username1 = $session->param("user_id"); warn("username1 : '$username1'");

      Error Log manageusers

      Already logged on LoggedOn_user_id : '428' at /home/jalamior/www/httpsdocs/cgi-bin/lib/perl/ line 287. username1: '428' at /home/jalamior/www/httpsdocs/cgi-bin/lib/perl/ line 290.


      $LoggedOn_user_id = $username1; warn("Already logged on LoggedOn_user_id : '$LoggedOn_user_id'");

      And the error log

      Already logged on LoggedOn_user_id : '428' at /home/jalamior/www/httpsdocs/cgi-bin/lib/perl/ line 287

      So the desired value is present in the variable in manageusers

      In calling unit, changed import use manageusers; Commented out qw(LoggedOn_user_id);

      Line 66 in calling unit.

      $userid_1 = $manageusers::LoggedON_user_id;

      warn("userid : '$userid_1' ");

      Error Log line 66

      Sat Apr 8 06:54:25 2017 update_tables-development.cgi: Use of uninitialized value in concatenation (.) or string at update_tables-development.cgi line 66. userid : '' at update_tables-development.cgi line 66.

      Don't know where else to look

        $userid_1 = $manageusers::LoggedON_user_id;

        Is that really line 66 of the cgi ? to work it needs to be

        $userid_1 = $manageusers::LoggedOn_user_id;
        to match the name in

        Update : Try this simplest of test script alongside update_tables-development.cgi with your existing manageuser module.

        1) Change the #!/usr/bin/perl line to whatever you use for your other cgi scripts. 2) Make sure the permissions are executable by the webserver. 3) Check the line endings are UNIX format (if that's what they need to be)

        #!/usr/bin/perl # moduletest.cgi use strict; use CGI ':standard'; use CGI::Carp 'fatalsToBrowser'; use manageusers qw($LoggedOn_user_id); my $now = scalar localtime; print header,start_html; print qq(<b>$now</b><pre> \$manageusers::LoggedOn_user_id = $manageusers::LoggedOn_user_id \$LoggedOn_user_id = $LoggedOn_user_id </pre>); print end_html;
Re^5: global var
by poj (Abbot) on Apr 06, 2017 at 18:01 UTC

    In your original post you wrote 'I have global var in main unit:' and 'In another unit I have: use manageusers;'

    What do you mean by 'unit' ?. Do you have the same variable name declared in both the cgi script and the manageuser module something like this

    # cgi script use strict; our $LoggedOn_user_id = 0; # # # use manageusers qw($LoggedOn_user_id); print $LoggedOn_user_id;
    # package package manageusers; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw( $LoggedOn_user_id ); our $LoggedOn_user_id = 123; 1;

    The code prints 0 not 123


      our $LoggedOn_user_id = 0;

      Initializing variable. Later modified with data I want to share to other unit,

      Unit? Module? same difference, is it not?

      No on the var names being duplicated. Did multiple searches. Only one declaration with values loaded at different locations in program.

      This whole program is for a landlord association. Member logs on. Drill down to their status which is loaded into dataset displayed on form (using their unique id passed with $LoggedOn_user_id to the unit generating/displaying dataset. Display includes the number of tenants associated with this member. Next step is to drill down with click on that number to pull up another dataset of all tenants to display.

      When I manually set value in calling unit:

      #$userid_1 = manageusers::LoggedOn_user_id; #$userid_1 = $manageusers::LoggedOn_user_id; #$userid_1 = $LoggedOn_user_id; $userid_1 = 428;

      It of course works fine.

      Have another global

      $adminaccess = ($username1 eq "admin");

      To activate/inactivate menu items depending on login status using javascript in webpage. Logout succeeded form into iFrame deactivates menu through messaging.

      <script type="text/javascript"> var adminflag = $manageusers::adminaccess; </script>

      Passing variables not new.

        Unit? Module? same difference, is it not?

        Sorry to be so pedantic but it may be relevant to solving your problem. When you said in your post

        I have global var in main unit:
        @EXPORT = qw( $LoggedOn_user_id $VERSION = '0.0.1'; } our $LoggedOn_user_id;
        do you mean that code is in the 'main' part of package manageusers. At the top maybe before the subroutines declaration ?


      Export and calls look the same but I keep getting:

      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.

      Do not understand. Not this way for others. Something unique about this.

        In a former post here Re^4: global var you had this 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

        and your @EXPORT_OK in manageusers was

        our @EXPORT_OK = qw(
          &GetLoggedOnId  <<<<-------------------

        I hope you understand the cause of that error now in that $GetLoggedOnId and &GetLoggedOnId are different things.

        You now have the error

        "LoggedOn_user_id" is not exported by the manageusers module

        The questions that raises is

        Have you changed $GetLoggedOnId to LoggedOn_user_id and if so have you amended both the @EXPORT_OK in manageusers and the use manageusers qw() statement in update_tables-development.cgi ?

        As the error appears on line 30 perhaps you could post those first 30 lines of that script. Check the names carefully as in another post Re^6: global var you mentioned a function call &GetLoggedOn_user_id which is different again.


        Why does your code ask "managerusers" module to exports a "LoggedOn_user_id" function?

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1187322]
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-07-19 08:13 GMT
Find Nodes?
    Voting Booth?

    No recent polls found

    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.