Esto es probablemente debido al método heredado de una clase base. Sin embargo, en situaciones extremadamente extrañas, PODRÍA también ser inyectado dinámicamente en el espacio de nombre del módulo, lo que es mucho más difícil de entender.
Puede encontrar su sub o bien mediante la búsqueda de fuerza bruta o bien averiguando la clase base de un módulo (y posiblemente más arriba en la cadena de herencia) y buscando solo el código de las clases base. Voy a mostrar cómo hacer ambas cosas:
búsqueda de fuerza bruta: Este es probablemente la solución más fácil en casos complicados ya que el sub podría haber sido inyectado en el espacio del módulo dinámicamente por el módulo no ancestro y encontrar módulos ancestros no es 100% fácil debido a las múltiples formas de definir la herencia que podría haberse utilizado (use base, use parent, Moose stuff, cosas AUTOLOADED)
Primero, descubra qué otros módulos están cargados con My :: Módulo
perl -e 'use My::Module::DB::raw_info; print "$INC{$_}\n" foreach keys %INC'
Esto imprimirá la ubicación de todos los módulos
Entonces, la búsqueda de la definición de sub en todo ese código (el siguiente debe ser una sola línea, que se dividió para facilitar su legibilidad en 2 líneas):
grep search_like
`perl -e 'use My::Module::DB::raw_info; print "$INC{$_}\n" foreach keys %INC'`
Si esto devuelve demasiados resultados, cambie el grep para
grep "sub search_like"
`perl -e 'use My::Module::DB::raw_info; print "$INC{$_}\n" foreach keys %INC'`
esto le encontrar la definición en cualquier módulo de Mi :: módulo :: DB :: raw_info hereda lado a otro m sin analizar el código del módulo para la herencia.
Herencia:
Descubre los padres del módulo usando ISA
de la siguiente manera:
perl -e 'use My::Module::DB::raw_info; print "@My::Module::DB::raw_info::ISA\n";'
Para aclarar, esto sólo funciona para módulos "heredadas clásicamente" usando @ISA
, las cosas no alces . Tampoco funciona si se llama a la rutina mediante el Autocargador o se inyecta dinámicamente en la tabla de símbolos, lo que puede ocurrir en cualquier código, no necesariamente en el padre.
también "use base ..." – Arkadiy
"extends" es una cosa de Moose. =). –
no use base; _; , usa padre! –