Простое решение в Python3 +:
import time
todaysdate = time.strftime("%d/%m/%Y")
#with '.' isntead of '/'
todaysdate = time.strftime("%d.%m.%Y")
Если у вас есть пакет с именем Foo
, это должно сделать это:
no strict 'refs';
for(keys %Foo::) { # All the symbols in Foo's symbol table
print "$_\n" if exists &{"Foo::$_"}; # check if symbol is method
}
use strict 'refs';
В качестве альтернативы, чтобы получить список всех методов в пакете Foo
:
no strict 'refs';
my @methods = grep { defined &{"Foo::$_"} } keys %Foo::;
use strict 'refs';
Есть (даже слишком) много способов сделать это в Perl, потому что в Perl есть очень много способов делать что-то. Как кто-то прокомментировал, автоматически загружаемые методы всегда будут немного сложными. Однако вместо того, чтобы использовать свой собственный подход, я бы посоветовал вам взглянуть на Class :: Inspector на CPAN. Это позволит вам сделать что-то вроде:
my $methods = Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
если у вас есть пакет, использующий Moose , это достаточно просто:
print PackageNameHere->meta->dump;
И для более полных данных:
use Data::Dumper;
print Dumper( PackageNameHere->meta );
С чего начать. Для всего остального есть методы, которые появляются в -> meta
, которые описаны в Class :: MOP :: Class
. Вы можете немного подделать AdHoc доброту лося для пакетов без введите:
use Class::MOP::Class;
my $meta = Class::MOP::Class->initialize( PackageNameHere );
, а затем перейдите к использованию методов Class :: MOP, как если бы вы использовали Moose.
Для начала:
$meta->get_method_map();
используйте Moose; #, его потрясающе .
В общем, вы не можете сделать это с помощью динамического языка, такого как Perl. Пакет может определять некоторые методы, которые вы можете найти, но он также может создавать методы на лету, у которых нет определений, пока вы их не используете. Кроме того, даже вызов метода (который работает) может не определить его. Это то, что делает динамические языки прекрасными. :)
Какую задачу вы пытаетесь решить?