summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChip Salzenberg <chip@atlantic.net>1997-03-09 11:57:19 +1200
committerChip Salzenberg <chip@atlantic.net>1997-03-09 11:57:19 +1200
commitb42fedfb07682e12b18e39d330b684958f7cc765 (patch)
treea31b5980d2be80428265bb922390f70c4f437048
parent0c721ce2c118567e416384760f5ad175d956d33b (diff)
downloadperl-b42fedfb07682e12b18e39d330b684958f7cc765.tar.gz
New subroutine Symbol::qualify_to_ref()
(this is the same change as commit 578b087ab63db59886b8f9a1e8bebc8524523fa5, but as applied)
-rw-r--r--lib/Symbol.pm15
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/Symbol.pm b/lib/Symbol.pm
index e40ae7b357..6807e74479 100644
--- a/lib/Symbol.pm
+++ b/lib/Symbol.pm
@@ -23,6 +23,10 @@ Symbol - manipulate Perl symbols and their names
print qualify(\*x), "\n"; # returns \*x
print qualify(\*x, "FOO"), "\n"; # returns \*x
+ use strict refs;
+ print { qualify_to_ref $fh } "foo!\n";
+ $ref = qualify_to_ref $name, $pkg;
+
=head1 DESCRIPTION
C<Symbol::gensym> creates an anonymous glob and returns a reference
@@ -44,14 +48,19 @@ Qualification applies only to symbol names (strings). References are
left unchanged under the assumption that they are glob references,
which are qualified by their nature.
+C<Symbol::qualify_to_ref> is just like C<Symbol::qualify> except that it
+returns a glob ref rather than a symbol name, so you can use the result
+even if C<use strict 'refs'> is in effect.
+
=cut
BEGIN { require 5.002; }
require Exporter;
@ISA = qw(Exporter);
+@EXPORT = qw(gensym ungensym qualify qualify_to_ref);
-@EXPORT = qw(gensym ungensym qualify);
+$VERSION = 1.02;
my $genpkg = "Symbol::";
my $genseq = 0;
@@ -88,4 +97,8 @@ sub qualify ($;$) {
$name;
}
+sub qualify_to_ref ($;$) {
+ return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller };
+}
+
1;