ما هي أفضل طريقة لاكتشاف جميع الوظائف الفرعية وحدة بيرل لديها؟

StackOverflow https://stackoverflow.com/questions/607282

سؤال

ما هي أفضل طريقة لاكتشاف برمجيا جميع الوظائف الفرعية وحدة بيرل لديها؟ هذا يمكن أن يكون وحدة نمطية فئة (لاEXPORT)، أو أي شيء في ما بينهما.

وتحرير: جميع الطرق أنظر إلى الأسفل مثل أنها سوف تعمل. كنت على الارجح استخدام فئة :: الشمة أو فئة :: المفتش في الإنتاج. ومع ذلك، يتم وضع علامة الإجابة ليون ك 'مقبولة' لأنه يجيب على سؤال حول ما الذي تمثله، على الرغم من no strict 'refs' لديها لاستخدامها. :-) الفئة :: قد يكون الشمة خيارا جيدا كلما تقدمت. يبدو قد ذهب الكثير من التفكير في ذلك.

هل كانت مفيدة؟

المحلول

sub list_module {
    my $module = shift;
    no strict 'refs';
    return grep { defined &{"$module\::$_"} } keys %{"$module\::"}
}

وETA: إذا كنت ترغب في تصفية الوظائف الفرعية المستوردة، يمكنك القيام بذلك

use B qw/svref_2object/;

sub in_package {
    my ($coderef, $package) = @_;
    my $cv = svref_2object($coderef);
    return if not $cv->isa('B::CV') or $cv->GV->isa('B::SPECIAL');
    return $cv->GV->STASH->NAME eq $package;
}

sub list_module {
    my $module = shift;
    no strict 'refs';
    return grep { defined &{"$module\::$_"} and in_package(\&{*$_}, $module) } keys %{"$module\::"}
}

نصائح أخرى

الدرجة :: المفتش :

<اقتباس فقرة>   

والدرجة :: المفتش يسمح لك للحصول على معلومات حول فئة المحملة. معظم أو كل هذه المعلومات يمكن العثور عليها بطرق أخرى، ولكنها ليست دائما ودية للغاية، وعادة ما تنطوي على مستوى عال نسبيا من بيرل سحر، أو غريب وغير عادي كود المظهر. الطبقة :: المفتش يحاول تقديم، واجهة أكثر ودية أسهل على هذه المعلومات ...

وإلقاء نظرة على هذا: :: الشمة

<اقتباس فقرة>   

واجهة بدلا مخصصة في الوقت الحالي، ومن المرجح أن تتغير. بعد إنشاء مثيل جديد، استدعاء الأسلوب التقرير هو الخيار الأفضل لك. يمكنك بعد ذلك دراسة بصريا للبحث عن المشاكل المحتملة:

my $sniff = Class::Sniff->new({class => 'Some::Class'});
print $sniff->report;
     

وهذه الوحدة محاولات لمساعدة المبرمجين العثور على 'كود الروائح "في رمز وجوه المنحى. إذا كانت تقارير شيء، وهذا لا يعني أن التعليمات البرمجية غير صحيح. بل يعني فقط ان كنت قد ترغب في النظر في التعليمات البرمجية الخاصة بك أكثر قليلا عن كثب لمعرفة ما إذا كان لديك أي مشاكل.

     

في الوقت الحاضر، ونحن نفترض الافتراضي بيرل أقصى اليمين، متعمقة أول أمر البحث. ونحن قد يغير هذا في المستقبل (وهناك عمل حول مع أسلوب المسارات. المزيد عن هذا لاحقا) ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top