/[cvs]/nfo/perl/libs/Data/Mungle/Code/Symbol.pm
ViewVC logotype

Annotation of /nfo/perl/libs/Data/Mungle/Code/Symbol.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide annotations)
Fri Jun 6 03:25:42 2003 UTC (21 years, 1 month ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +24 -2 lines
+ sub alias_simple

1 root 1.1 ## ---------------------------------------------------------------------------
2 joko 1.4 ## $Id: Symbol.pm,v 1.3 2003/05/13 07:33:38 joko Exp $
3 root 1.1 ## ---------------------------------------------------------------------------
4 joko 1.2 ## $Log: Symbol.pm,v $
5 joko 1.4 ## Revision 1.3 2003/05/13 07:33:38 joko
6     ## enhanced: now can get symbols as list or hash
7     ##
8 joko 1.3 ## Revision 1.2 2003/03/27 15:17:03 joko
9     ## namespace fixes for Data::Mungle::*
10     ##
11 joko 1.2 ## Revision 1.1 2003/01/22 17:59:22 root
12     ## + refactored from Mail::Audit::Dispatch
13     ##
14 root 1.1 ## ---------------------------------------------------------------------------
15    
16    
17 joko 1.3 =pod
18    
19     =head1 TODO
20    
21 joko 1.4 o Investigate: Could this functionality be completely replaced through CPAN's
22     - Symbol.pm?
23     - Alias.pm?
24 joko 1.3
25    
26     =cut
27    
28    
29 joko 1.2 package Data::Mungle::Code::Symbol;
30 root 1.1
31     use strict;
32     use warnings;
33    
34     require Exporter;
35     our @ISA = qw( Exporter );
36     our @EXPORT_OK = qw(
37     export_symbols
38 joko 1.4 alias_simple
39 root 1.1 );
40    
41    
42 joko 1.2 use Data::Mungle::Code::Ref qw( get_coderef );
43 joko 1.4 use Symbol;
44 root 1.1
45     sub export_symbols {
46     my $symbols = shift;
47     my $mixinPackage = shift;
48     my $callPackage = shift;
49     $callPackage ||= __PACKAGE__;
50 joko 1.3 if (ref $symbols eq 'ARRAY') {
51     foreach (@$symbols) {
52     {
53     no strict 'refs';
54     my $newName = $mixinPackage . '::' . $_;
55     *{$newName} = get_coderef($callPackage, $_);
56     }
57     }
58    
59     } elsif (ref $symbols eq 'HASH') {
60     foreach (keys %$symbols) {
61     {
62     no strict 'refs';
63     my $newName = $mixinPackage . '::' . $symbols->{$_};
64     *{$newName} = get_coderef($callPackage, $_);
65     }
66 root 1.1 }
67 joko 1.3
68 root 1.1 }
69     }
70    
71 joko 1.4 # Qualifies a variable identified by package name and variable
72     # name into a valid symbol, resolves that symbol and stores the
73     # result (a reference to this variable) into the designated target (slot).
74     sub alias_simple {
75     my $rule = shift;
76     my $target = $rule->{slot};
77     my $name = $rule->{alias};
78     my $sym = qualify($rule->{var_name}, $rule->{var_pkg});
79     {
80     no strict 'refs';
81     $target->{$name} = ${$sym};
82     }
83     }
84    
85 root 1.1 1;
86 joko 1.4 __END__

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed