Что лучший способ состоит в том, чтобы обнаружить все подпрограммы, которые имеет модуль Perl?

Для пользователей Symfony2:

Если вы не хотите что-то менять в своем javascript, чтобы это сработало, вы можете сделать эти изменения в своем приложении symfony:

Создать класс который расширяет класс Symfony \ Component \ HttpFoundation\request:

<?php

namespace Acme\Test\MyRequest;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\ParameterBag;

class MyRequest extends Request{


/**
* Override and extend the createFromGlobals function.
* 
* 
*
* @return Request A new request
*
* @api
*/
public static function createFromGlobals()
{
  // Get what we would get from the parent
  $request = parent::createFromGlobals();

  // Add the handling for 'application/json' content type.
  if(0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/json')){

    // The json is in the content
    $cont = $request->getContent();

    $json = json_decode($cont);

    // ParameterBag must be an Array.
    if(is_object($json)) {
      $json = (array) $json;
  }
  $request->request = new ParameterBag($json);

}

return $request;

}

}

Теперь используйте класс в app_dev.php (или любой файл индекса, который вы используете)

// web/app_dev.php

$kernel = new AppKernel('dev', true);
// $kernel->loadClassCache();
$request = ForumBundleRequest::createFromGlobals();

// use your class instead
// $request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
24
задан Robert P 3 March 2009 в 20:55
поделиться

3 ответа

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\::"}
}
23
ответ дан 28 November 2019 в 23:28
поделиться

Класс:: Инспектор :

Класс:: Инспектор позволяет Вам получать информацию о загруженном классе. Большинство или вся эта информация могут быть найдены другими способами, но они не всегда очень дружелюбны, и обычно включают относительно высокий уровень колдовства Perl или странный и необычно выглядящий код. Класс:: Инспектор пытается предоставить более легкий, более дружественный интерфейс этой информации...

12
ответ дан gnat 28 November 2019 в 23:28
поделиться

Взгляните на это: Класс:: Сниффинг

интерфейс является довольно специальным в данный момент и, вероятно, изменится. После создания нового экземпляра, называя метод отчета Ваш наилучший вариант. Можно тогда визуально исследовать его для поиска потенциальных проблем:

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

Этот модуль пытается помочь программистам найти 'запахи кода' в объектно-ориентированном коде. Если это сообщает о чем-то, это не означает, что Ваш код является неверным. Это просто означает, что Вы могли бы хотеть посмотреть на свой код немного более тесно, чтобы видеть, есть ли у Вас какие-либо проблемы.

В настоящее время, мы принимаем крайний левый порядок поиска в глубину Perl по умолчанию. Мы можем изменить это в будущем (и существует обходное решение с методом путей. Больше на этом позже)...

9
ответ дан gnat 28 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

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