Как я называю имя функции, которое хранится в хеше в Perl?

Я ищу так часто, что я нашел полезным отобразить ключ подчеркивания для удаления поискового выделения:

nnoremap <silent> _ :nohl<CR>
8
задан Ether 10 June 2010 в 14:50
поделиться

3 ответа

Foo->${\$hash{func}};

Но для ясности я бы, вероятно, все же записал это как:

my $method = $hash{func};
Foo->$method;
14
ответ дан 5 December 2019 в 10:03
поделиться

Есть ли причина, по которой вы храните имена подпрограмм вместо ссылок на код?

например,

use strict; use warnings;

package Foo;
sub foo { print "in foo()\n" }

package main;
my %hash = (func => \&Foo::foo);

$hash{func}->();

Вы не будете передавать имя класса, но если это важно для вас, вы можете использовать что-то вроде

my %hash = ( func => sub { return Foo->foo(@_) } );
2
ответ дан 5 December 2019 в 10:03
поделиться

Вы пробовали использовать метод UNIVERSAL can ? Вы должны иметь возможность реализовать что-то вроде этого:

## untested
if ( my $code = $object->can( $hash{func} ) ) {
    $object->$code();
}

Я сделал бесполезный однострочный пример, чтобы продемонстрировать:

perl -MData::Dumper -le 'my %h = ( f => "Dump" ); my $o = Data::Dumper->new( [qw/1 2 3/] ); my $ref = $o->can( $h{f} ); print $o->$ref()'
1
ответ дан 5 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: