<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:tahoma, new york, times, serif;font-size:12pt"><DIV></DIV>
<DIV>Globals are not recommended. You&nbsp;could make them package variables and declare them with 'my' or 'our', and then access them using the package name $Neo::Web::Session, or $Darley::Supers::CurrentUser when&nbsp;from outside the package. Personally, I'd make an object and fetch them using an accessor,&nbsp;i.e.</DIV>
<DIV>&nbsp;</DIV>
<DIV>my $web =&nbsp;new Neo::Web;</DIV>
<DIV>&nbsp;</DIV>
<DIV>$web-&gt;session;</DIV>
<DIV>&nbsp;</DIV>
<DIV>package Neo::Web;</DIV>
<DIV>&nbsp;</DIV>
<DIV>sub new {</DIV>
<DIV>...</DIV>
<DIV>}</DIV>
<DIV>&nbsp;</DIV>
<DIV>sub session {</DIV>
<DIV>...</DIV>
<DIV>}&nbsp;</DIV>---<BR>Mark Mertel<BR>206.441.4663<BR>mark.mertel@yahoo.com<BR>http://www.linkedin.com/in/markmertel<BR>http://www.seattlejobs.com/13147468
<DIV><BR></DIV>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: tahoma, new york, times, serif"><BR>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: times new roman, new york, times, serif"><FONT face=Tahoma size=2>
<HR SIZE=1>
<B><SPAN style="FONT-WEIGHT: bold">From:</SPAN></B> Peter Darley &lt;pdarley@kinesis-cem.com&gt;<BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> Mark Mertel &lt;mark.mertel@yahoo.com&gt;; spug-list@pm.org<BR><B><SPAN style="FONT-WEIGHT: bold">Sent:</SPAN></B> Monday, March 23, 2009 12:10:14 PM<BR><B><SPAN style="FONT-WEIGHT: bold">Subject:</SPAN></B> RE: SPUG: Confusing behaivior with exported variables<BR></FONT><BR>
<STYLE>
<!--
 
 _filtered {font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;}
 _filtered {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}
 _filtered {font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4;}
 
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;margin-bottom:.0001pt;font-size:11.0pt;font-family:"Calibri", "sans-serif";}
a:link, span.MsoHyperlink
        {color:blue;text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;text-decoration:underline;}
p.msochpdefault, li.msochpdefault, div.msochpdefault
        {margin-right:0in;margin-left:0in;font-size:10.0pt;font-family:"Times New Roman", "serif";}
span.emailstyle17
        {font-family:"Calibri", "sans-serif";color:windowtext;}
span.EmailStyle19
        {font-family:"Calibri", "sans-serif";color:#1F497D;}
.MsoChpDefault
        {font-size:10.0pt;}
 _filtered {margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {}
-->
</STYLE>

<DIV class=Section1>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">Mark and Tye,</SPAN></P>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">&nbsp;</SPAN></P>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I would have sworn that I took out the my declaration in the second module.&nbsp; I’ll try removing that and see how it works.</SPAN></P>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I usually do use strict as a default, but the first module didn’t have it so I removed it in my efforts to figure out what was going on.</SPAN></P>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">&nbsp;</SPAN></P>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">Thanks,<BR>Peter</SPAN></P>
<P class=MsoNormal><SPAN style="COLOR: #1f497d">&nbsp;</SPAN></P>
<DIV>
<DIV style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; PADDING-LEFT: 0in; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; PADDING-TOP: 3pt; BORDER-BOTTOM: medium none">
<P class=MsoNormal><B><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma', 'sans-serif'">From:</SPAN></B><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma', 'sans-serif'"> Mark Mertel [mailto:mark.mertel@yahoo.com] <BR><B>Sent:</B> Friday, March 20, 2009 2:16 PM<BR><B>To:</B> Peter Darley; spug-list@pm.org<BR><B>Subject:</B> Re: SPUG: Confusing behaivior with exported variables</SPAN></P></DIV></DIV>
<P class=MsoNormal>&nbsp;</P>
<DIV>
<DIV>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 'Tahoma', 'sans-serif'">probably should 'use strict' as well. the first package doesn't declare the %Session hash, so it becomes global, and the second package scopes the %CurrentUser inside the BEGIN block. 'use strict' should point these things out.<BR>&nbsp;</SPAN></P></DIV>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 'Tahoma', 'sans-serif'">---<BR>Mark Mertel<BR>206.441.4663<BR>mark.mertel@yahoo.com<BR>http://www.linkedin.com/in/markmertel<BR>http://www.seattlejobs.com/13147468 </SPAN></P>
<DIV>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 'Tahoma', 'sans-serif'">&nbsp;</SPAN></P></DIV>
<DIV>
<P class=MsoNormal><SPAN style="FONT-FAMILY: 'Tahoma', 'sans-serif'">&nbsp;</SPAN></P>
<DIV>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma', 'sans-serif'">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P class=MsoNormal style="MARGIN-BOTTOM: 12pt"><B><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma', 'sans-serif'">From:</SPAN></B><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Tahoma', 'sans-serif'"> Peter Darley &lt;pdarley@kinesis-cem.com&gt;<BR><B>To:</B> spug-list@pm.org<BR><B>Sent:</B> Friday, March 20, 2009 12:35:40 PM<BR><B>Subject:</B> SPUG: Confusing behaivior with exported variables</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman', 'serif'"></SPAN></P>
<DIV>
<P class=MsoNormal>Folks,</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; It’s been a long time since I’ve bugged y’all with a stupid question, but I’ve got a new one so I’m hoping someone can help me out.</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The problem is with exporting variables, and having them available to both a script that uses the module exporting the variable, and the module it’s self.&nbsp; I have two modules, one on a machine at work and one on a machine at home.&nbsp; Both are doing something that looks super similar to me.</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; At work I have: </P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>package Neo::Web;</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>use ...</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>use CGI qw/:standard/;</P>
<P class=MsoNormal>use CGI::Cookie;</P>
<P class=MsoNormal>use Apache::DBI;</P>
<P class=MsoNormal>use Apache::Session::Postgres;</P>
<P class=MsoNormal>use Data::Dumper;</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>BEGIN </P>
<P class=MsoNormal>{</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use Exporter&nbsp;&nbsp; ();</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @ISA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = qw(Exporter);</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @EXPORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = qw(%Session $SessionID </P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &amp;TieSession &amp;UntieSession ... );</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConnectDB(DBName=&gt;'Sessions');</P>
<P class=MsoNormal>}</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>sub TieSession</P>
<P class=MsoNormal>{</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tie %Session, 'Apache::Session::Postgres', $SessionID, {Handle=&gt;$Neo::DB::Sessions, Commit=&gt;0};</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $SessionID = $Session{_session_id};</P>
<P class=MsoNormal>}</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The scripts using this package can get at %Session, and this module can get at %Session.&nbsp; They are the same variable and have the same contents.</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; At home I have:</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>package Darley::Supers;</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>use ... ;</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>use Data::Dumper;</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>BEGIN </P>
<P class=MsoNormal>{</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my (%CurrentUser);</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use Exporter&nbsp;&nbsp; ();</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @ISA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = qw(Exporter);</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @EXPORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = qw(%CurrentUser</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&amp;Power &amp;Challenge &amp;GetUser &amp;GetOrg &amp;GetCity);</P>
<P class=MsoNormal>}</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>sub SetCurrentOrgSetting</P>
<P class=MsoNormal>{</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; my (%Args) = @_;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Args: Setting = Setting to store</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Value = Value to store</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StoreOrgSetting(OrgID=&gt;$CurrentUser{Org}{org_id}, Setting=&gt;$Args{Setting}, Value=&gt;$Args{Value});</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $CurrentUser{Org}{Settings}{$Args{Setting}} = $Args{Value};</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;</P>
<P class=MsoNormal>}</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; And the script using this module can get at %CurrentUser, but when this package uses it, it’s empty.&nbsp; I can’t figure out why the exported hash is the same in the first example, but has two different values in the second.</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>Thanks for any help,</P>
<P class=MsoNormal>Peter</P>
<P class=MsoNormal>&nbsp;</P>
<P class=MsoNormal>&nbsp;</P></DIV></DIV></DIV></DIV>
<P class=MsoNormal><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman', 'serif'">&nbsp;</SPAN></P></DIV></DIV></DIV></div><br>

      </body></html>