Brian McCauley provided a better answer to this, and i re-arranged it a
bit to remove all of the symrefs from the previous answer.




Index: perlfaq7.pod
===================================================================
RCS file: /cvs/public/perlfaq/perlfaq7.pod,v
retrieving revision 1.9
diff -u -d -r1.9 perlfaq7.pod
--- perlfaq7.pod        21 Jun 2002 04:32:00 -0000      1.9
+++ perlfaq7.pod        29 Aug 2002 03:55:28 -0000
@@ -480,23 +480,33 @@
 
 =head2 How can I access a dynamic variable while a similarly named lexical is in 
scope?
 
-You can do this via symbolic references, provided you haven't set
-C<use strict "refs">.  So instead of $var, use C<${'var'}>.
+If you know your package, you can just mention it explicitly, as in
+$Some_Pack::var. Note that the notation $::var is B<not> the dynamic $var
+in the current package, but rather the one in the "main" package, as
+though you had written $main::var.
 
-    local $var = "global";
-    my    $var = "lexical";
+       use vars '$var';
+       local $var = "global";
+       my    $var = "lexical";
 
-    print "lexical is $var\n";
+       print "lexical is $var\n";
+       print "global  is $main::var\n";
 
-    no strict 'refs';
-    print "global  is ${'var'}\n";
+Alternatively you can use the compiler directive our() to bring a
+dynamic variable into the current lexical scope.
 
-If you know your package, you can just mention it explicitly, as in
-$Some_Pack::var.  Note that the notation $::var is I<not> the dynamic
-$var in the current package, but rather the one in the C<main>
-package, as though you had written $main::var.  Specifying the package
-directly makes you hard-code its name, but it executes faster and
-avoids running afoul of C<use strict "refs">.
+       require v5.6; # our() did not exist before that
+       use vars '$var';
+
+       local $var = "global";
+       my $var    = "lexical";
+
+       print "lexical is $var\n";
+
+       {
+         our $var;
+         print "global  is $var\n";
+       }
 
 =head2 What's the difference between deep and shallow binding?

Reply via email to