[Cascavel-pm] Várias Variações de Variáveis... [WasRe: EXPLICAÇÃO SOBRE: PUSH, SPLIT e FOREACH.]

Nilson Santos Figueiredo Junior acid06 em gmail.com
Sexta Junho 22 06:40:05 PDT 2007


On 6/22/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
> # PERGUNTA: Como saber que Not::My::Problem suporta um determinado
> método, se ela implementa AUTOLOAD?

A forma correta de se utilizar o AUTOLOAD é também sobrescrever o método can().

Por isso, a sintaxe UNIVERSAL::can($obj, 'method') é considerada não
recomendada, o correto é utilizar $obj->can('method'). Isso tem um
problema porque você não pode chamar métodos sobre algo que não seja
um objeto.

Dessa maneira, a forma correta e segura de checar se um método existe é:

  use Scalar::Util qw/blessed/;

  if (blessed $obj and $obj->can('method')) {
      $obj->method();
  }

Se o pacote implementa métodos gerados pro AUTOLOAD mas não
sobrescrever o método can(), o problema é no pacote.

-Nilson Santos F. Jr.


Mais detalhes sobre a lista de discussão Cascavel-pm