> 
> Una  forma sería... no teniendo subrutinas... :)
> 
> Es decir... lo mismo que se  hace con las funciones inline en C  
><http://www.greenend.org.uk/rjk/2003/03/inline.html>
> 
> En Perl, sí  que hay una manera de indicar que queremos que una función sea 
>'inline', usando  prototipos. Pero no podremos hacer con todas las  
>funciones...
> 
> http://perldoc.perl.org/perlsub.html#Constant-Functions
> 
> Functions  with a prototype of () are potential candidates for inlining. If 
> the 
>result  after optimization and constant folding is either a constant or a  
>lexically-scoped scalar which has no other references, then it will be used in 
> 
>place of function calls made without & . Calls made using & are never  
>inlined. 
>(See constant.pm for  an easy way to declare most constants.)

En realidad esto de las funciones con prototipo () que se expanden en linea no 
es mas que un "hack" para definir constantes... más alla de eso, no creo que 
nadie sea capaz de encontrarle alguna utilidad.

> O a mano...
> 
> Tendrías que  hacer que el código tuviese un constructor de código, que 
>sustituyera cada  aparición de la subrutina en el flujo principal del 
>programa, 
>por el código de  la propia subrutina, y luego, hacer un eval() del código 
>generado.
> 
> En  buena parte de los casos, sería suficiente con meter el código dentro de 
> un  
>nuevo contexto ({ }), y añadiendo al principio una forma de asignar los  
>argumentos que queramos pasar a la subrutina.

Con el soporte para plugable-keywords en 5.12 se podría crear un nuevo token 
para expandir funciones. Algo asi como...

  sub foo { ... }

  $bar = inline_sub foo(@args);

... pero no creo que sea facil ;-)

- Salva

_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm

Responder a