mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-01 18:25:59 +00:00
75 lines
2.2 KiB
Perl
75 lines
2.2 KiB
Perl
# This program is copyright 2013 Percona Ireland Ltd.
|
|
# Feedback and improvements are welcome.
|
|
#
|
|
# THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
# MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it under
|
|
# the terms of the GNU General Public License as published by the Free Software
|
|
# Foundation, version 2; OR the Perl Artistic License. On UNIX and similar
|
|
# systems, you can issue `man perlgpl' or `man perlartistic' to read these
|
|
# licenses.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
# Place, Suite 330, Boston, MA 02111-1307 USA.
|
|
# ###########################################################################
|
|
# Lmo::Utils package
|
|
# ###########################################################################
|
|
package Lmo::Utils;
|
|
|
|
use strict;
|
|
use warnings qw( FATAL all );
|
|
require Exporter;
|
|
our (@ISA, @EXPORT, @EXPORT_OK);
|
|
|
|
BEGIN {
|
|
@ISA = qw(Exporter);
|
|
@EXPORT = @EXPORT_OK = qw(
|
|
_install_coderef
|
|
_unimport_coderefs
|
|
_glob_for
|
|
_stash_for
|
|
);
|
|
}
|
|
|
|
{
|
|
# Gets the glob from a given string.
|
|
no strict 'refs';
|
|
sub _glob_for {
|
|
return \*{shift()}
|
|
}
|
|
|
|
# Gets the stash from a given string.
|
|
# A stash is a symbol table hash; rough explanation on
|
|
# http://perldoc.perl.org/perlguts.html#Stashes-and-Globs
|
|
# But the gist of it is that we can use a hash-like thing to
|
|
# refer to a class and modify it.
|
|
sub _stash_for {
|
|
return \%{ shift() . "::" };
|
|
}
|
|
}
|
|
|
|
sub _install_coderef {
|
|
my ($to, $code) = @_;
|
|
|
|
return *{ _glob_for $to } = $code;
|
|
}
|
|
|
|
sub _unimport_coderefs {
|
|
my ($target, @names) = @_;
|
|
return unless @names;
|
|
my $stash = _stash_for($target);
|
|
foreach my $name (@names) {
|
|
if ($stash->{$name} and defined(&{$stash->{$name}})) {
|
|
delete $stash->{$name};
|
|
}
|
|
}
|
|
}
|
|
|
|
1;
|
|
# ###########################################################################
|
|
# End Lmo::Utils package
|
|
# ###########################################################################
|