2011-08-24 6 views

Respuesta

11

: method es function attribute descripción. Una subrutina así marcada no activará la advertencia "Llamada ambigua resuelta como CORE ::% s".

De ysth 's comentario:

La advertencia ocurre cuando el sub tiene el mismo nombre que una orden interna y se llama sin & y no como una llamada de método; perl usa el builtin pero da una advertencia. El método: silencia la advertencia porque indica claramente que el submarino nunca fue pensado para ser llamado como no método de todos modos.

actualización

Este código simplemente llama al método bar cuando foo se llama:

sub foo : method { ## Mark function as method 
    shift->bar(@_) ## Pass all parameters to bar method of same object 
} 

Más detalles:

  • : method - Indica que la subrutina hace referencia es un método . Una subrutina así marcada no activará la advertencia "Llamada ambigua resuelta como CORE ::% s".
  • shift - Obtiene primer parámetro de @_, que será $self
  • ->bar(@_) - llaman mismo método de clase bar con todos los demás parámetros

Usted puede leer esto como:

sub foo : method { 
    my ($self) = shift @_; 
    return $self->bar(@_); 
} 
+0

¿Qué ' sub foo: método {shift-> bar (@_)} 'significa como un todo? – asker

+0

He agregado más detalles –

+0

Parece que todavía funciona sin el atributo 'method', ¿verdad? – asker

Cuestiones relacionadas