ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl-win32-users
perl-win32-users
RE: why doesn't this work?
by Peter Eisengrein other posts by this author
Sep 28 2004 9:37AM messages near this date
view in the new Beta List Site
Module to retrieve Windows open Shared files | AW: HTML Form data into Word Document
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_001_01C4A579.7E824930
Content-Type: text/plain
Content-Length: 2012
Lines: 98

One other way would be:

sub callme
{
	if ($ENV{Oracle}) 
	{
		print "Version 1\n";
	}
	else
	{
		print "Version 2\n";
 	}
}

I realize this is not quite the same thing, but why not do it this way?



>  -----Original Message-----
>  From: Eric Amick [mailto:eric-amick@[...].net]
>  Sent: Monday, September 27, 2004 7:41 PM
>  To: perl-win32-users@[...].com
>  Subject: Re: why doesn't this work?
>  
>  
>  On Mon, 27 Sep 2004 12:05:10 -0700, you wrote:
>  
>  >================
>  >test script:
>  >================
>  >use strict;
>  >use testlib;
>  >
>  >print("Env Var 'Oracle' is set to '$ENV{Oracle}'\n");
>  >callme();
>  >
>  >================
>  >test library (testlib.pm):
>  >================
>  >use strict;
>  >
>  >if ($ENV{Oracle}) {
>  >	sub callme {print("Version 1\n");}
>  >	}
>  >else {
>  >	sub callme {print("Version 2\n");}
>  >	}
>  
>  Normal subroutine definitions occur at compile time, so the second
>  definition overrides the first before the code even executes. 
>  You can do
>  this instead:
>  
>  if ($ENV{Oracle}) {
>  	eval 'sub callme {print("Version 1\n");}'
>  	}
>  else {
>  	eval 'sub callme {print("Version 2\n");}'
>  	}
>  
>  or this:
>  
>  if ($ENV{Oracle}) {
>  	$callme = sub {print("Version 1\n");}
>  	}
>  else {
>  	$callme = sub {print("Version 2\n");}
>  	}
>  
>  or even this:
>  
>  if ($ENV{Oracle}) {
>  	*callme = sub {print("Version 1\n");}
>  	}
>  else {
>  	*callme = sub {print("Version 2\n");}
>  	}
>  
>  In any case, you will need either an argument list or an 
>  ampersand when
>  calling callme(), since Perl won't know the type at compile time. (The
>  second case would need $callme->() or &$callme.)
>  
>  -- 
>  Eric Amick
>  Columbia, MD
>  
>  _______________________________________________
>  Perl-Win32-Users mailing list
>  Perl-Win32-Users@[...].com
>  To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
>  
>  
>  
>  __________________________________________________________
>  This message was scanned by GatewayDefender
>  7:43:44 PM ET - 9/27/2004
>  
------_=_NextPart_001_01C4A579.7E824930
Content-Type: text/html
Content-Length: 5964
Lines: 152

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> 
<HTML> 
<HEAD> 
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII"> 
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12"> 
<TITLE> RE: why doesn't this work?</TITLE>
</HEAD> 
<BODY> 

<P> <FONT SIZE=2>One other way would be:</FONT>
</P> 

<P> <FONT SIZE=2>sub callme</FONT>
<BR> <FONT SIZE=2>{</FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>if ($ENV{Oracle}) </FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>{</FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <F
ONT SIZE=2> print &quot;Version 1\n&quot;;</FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>}</FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>else</FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT SIZE=2>{</FONT>
<BR> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <F
ONT SIZE=2> print &quot;Version 2\n&quot;;</FONT>
<BR> <FONT SIZE=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>}</FONT>
</P> 

<P> <FONT SIZE=2>I realize this is not quite the same thing, but why not do it this way?</FON
T> 
</P> 
<BR> 
<BR> 

<P> <FONT SIZE=2>&gt; -----Original Message-----</FONT>
<BR> <FONT SIZE=2>&gt; From: Eric Amick [<A HREF="mailto:eric-amick@comcast.net">mailto:eric-
amick@[...].net</A> ]</FONT>
<BR> <FONT SIZE=2>&gt; Sent: Monday, September 27, 2004 7:41 PM</FONT>
<BR> <FONT SIZE=2>&gt; To: perl-win32-users@[...].com</FONT>
<BR> <FONT SIZE=2>&gt; Subject: Re: why doesn't this work?</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; On Mon, 27 Sep 2004 12:05:10 -0700, you wrote:</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; &gt;================</FONT>
<BR> <FONT SIZE=2>&gt; &gt;test script:</FONT>
<BR> <FONT SIZE=2>&gt; &gt;================</FONT>
<BR> <FONT SIZE=2>&gt; &gt;use strict;</FONT>
<BR> <FONT SIZE=2>&gt; &gt;use testlib;</FONT>
<BR> <FONT SIZE=2>&gt; &gt;</FONT>
<BR> <FONT SIZE=2>&gt; &gt;print(&quot;Env Var 'Oracle' is set to '$ENV{Oracle}'\n&quot;);</F
ONT> 
<BR> <FONT SIZE=2>&gt; &gt;callme();</FONT>
<BR> <FONT SIZE=2>&gt; &gt;</FONT>
<BR> <FONT SIZE=2>&gt; &gt;================</FONT>
<BR> <FONT SIZE=2>&gt; &gt;test library (testlib.pm):</FONT>
<BR> <FONT SIZE=2>&gt; &gt;================</FONT>
<BR> <FONT SIZE=2>&gt; &gt;use strict;</FONT>
<BR> <FONT SIZE=2>&gt; &gt;</FONT>
<BR> <FONT SIZE=2>&gt; &gt;if ($ENV{Oracle}) {</FONT>
<BR> <FONT SIZE=2>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; sub callme {print(&quot;Version 1\n&quot;
);}</FONT> 
<BR> <FONT SIZE=2>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; &gt;else {</FONT>
<BR> <FONT SIZE=2>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; sub callme {print(&quot;Version 2\n&quot;
);}</FONT> 
<BR> <FONT SIZE=2>&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; Normal subroutine definitions occur at compile time, so the second</FO
NT> 
<BR> <FONT SIZE=2>&gt; definition overrides the first before the code even executes. </FONT>
<BR> <FONT SIZE=2>&gt; You can do</FONT>
<BR> <FONT SIZE=2>&gt; this instead:</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; if ($ENV{Oracle}) {</FONT>
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval 'sub callme {print(&quot;Version 1
\n&quot;);}'</FONT> 
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; else {</FONT>
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval 'sub callme {print(&quot;Version 2
\n&quot;);}'</FONT> 
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; or this:</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; if ($ENV{Oracle}) {</FONT>
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $callme = sub {print(&quot;Version 1\n&
quot;);}</FONT> 
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; else {</FONT>
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $callme = sub {print(&quot;Version 2\n&
quot;);}</FONT> 
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; or even this:</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; if ($ENV{Oracle}) {</FONT>
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *callme = sub {print(&quot;Version 1\n&
quot;);}</FONT> 
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; else {</FONT>
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *callme = sub {print(&quot;Version 2\n&
quot;);}</FONT> 
<BR> <FONT SIZE=2>&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; In any case, you will need either an argument list or an </FONT>
<BR> <FONT SIZE=2>&gt; ampersand when</FONT>
<BR> <FONT SIZE=2>&gt; calling callme(), since Perl won't know the type at compile time. (The
</FONT> 
<BR> <FONT SIZE=2>&gt; second case would need $callme-&gt;() or &amp;$callme.)</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; -- </FONT>
<BR> <FONT SIZE=2>&gt; Eric Amick</FONT>
<BR> <FONT SIZE=2>&gt; Columbia, MD</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; _______________________________________________</FONT>
<BR> <FONT SIZE=2>&gt; Perl-Win32-Users mailing list</FONT>
<BR> <FONT SIZE=2>&gt; Perl-Win32-Users@[...].com</FONT>
<BR> <FONT SIZE=2>&gt; To unsubscribe: <A HREF="http://listserv.ActiveState.com/mailman/mysub
s" TARGET="_blank"> http://listserv.ActiveState.com/mailman/mysubs</A></FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
<BR> <FONT SIZE=2>&gt; __________________________________________________________</FONT>
<BR> <FONT SIZE=2>&gt; This message was scanned by GatewayDefender</FONT>
<BR> <FONT SIZE=2>&gt; 7:43:44 PM ET - 9/27/2004</FONT>
<BR> <FONT SIZE=2>&gt; </FONT>
</P> 

</BODY> 
</HTML> 
------_=_NextPart_001_01C4A579.7E824930--
Attachments:
unknown1
unknown2
unknown3
unknown4


Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved