是否有可能獲得特定Perl類的所有有效方法?是否有可能爲特定的Perl類獲取所有有效的方法?
我想操縱一個類的符號表並獲得它的所有方法。我發現我可以通過$obj->can($method)
從非子程序中分離出子程序,但這並不完全符合我的想法。
以下回報:
subroutine, Property, croak, Group, confess, carp, File
然而,subroutine
不是方法,(只是一個子程序),並croak
,confess
,並都導入到我的包。
我真正想要打印的是:
Property,Group, File
但我會採取:
subroutine, Property,Group, File
下面是我的程序:
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
my $sections = Section_group->new;
say join ", ", $sections->Sections;
package Section_group;
use Carp;
sub new {
return bless {}, shift;
}
sub Add {
my $self = shift;
my $section = shift;
}
sub Sections {
my $self = shift;
my @sections;
for my $symbol (keys %Section_group::) {
next if $symbol eq "new"; # This is a constructor
next if $symbol eq "Add"; # Not interested in this method
next if $symbol eq "Sections"; # This is it's own method
push @sections, $symbol if $self->can($symbol);
}
return wantarray ? @sections : \@sections;
}
sub subroutine {
my $param1 = shift;
my $param2 = shift;
}
sub Group {
my $self = shift;
my $section = shift;
}
sub File {
my $self = shift;
my $section = shift;
}
sub Property {
my $self = shift;
my $section = shift;
}
然後,有時候人們實際上會從另一個包中導入一個方法(例如'使用Exporter'import';'而不是'@ISA = qw(Exporter);')。 – cjm
@cjm當然,但我想這不會經常發生,甚至可能是反模式。希望大多數人能夠從OOP(它解決了許多命名空間問題)中精心分離程序性編程(包括導入)。沒有辦法知道導入的sub是否意味着成爲一種方法,所以這必須足夠好。 (等等,也許我們可以訪問':method'屬性......) – amon
_這很簡單。不重要的?你在週末建造超快速發電機? Pervoc on ** svref_2object **:_引用任何Perl值,並將引用值轉換爲適當的B :: OP派生類或B :: SV派生類中的對象._我不知道什麼這是在談論。但是,它確實有效。我想現在是時候深入研究以前未發表的內容,並更多地改進我的Perl遊戲。要麼,要麼學習Python。 –