[Moscow.pm] Хочу обычного

s2323 s2323 на land.ru
Чт Окт 17 12:33:39 PDT 2013


Прошлый вариант содержал бред. Вот получше:

package ShortNamer;

no strict;
no warnings;

sub import {
    my ($from, %opts) = @_;

    if (exists $opts{'-as'}) {
        my $to = $opts{'-as'};
        my $original_import = $to->can('import');
        foreach my $key (keys %{ $from . '::' }) {
            if ($key eq 'import' && $original_import) {
                *{$to . '::import'} = sub {
                    import(@_);
                    goto $original_import;
                };
                next;
            }
            *{$to . '::' . $key} = *{$from . '::' . $key};
        }
    }
}

1;



Подключение (последним в списке require):

package MyCompany::MySchema::Sklad::Feature::SubFeatureClass;

...
require ShortNamer;
ShortNamer->import(-as => __PACKAGE__);
...

1;



Использование:

use MyCompany::MySchema::Sklad::Feature::SubFeatureClass -as => 'Feature';

my $feature_obj1 = Feature->new;
my $feature_obj2 = Feature->new;


Подробная информация о списке рассылки Moscow-pm