2012-01-26 17 views

Respuesta

4

Los primeros usos @x en contexto escalar ... es decir, el tamaño de @x por lo substr('abcd',2) da cd.

5

substr tiene un prototipo como una función integrada, por lo que no se expande @x se evalúa en un contexto escalar, que devuelve 2, por lo que, básicamente, a la que llama substr ('ABCD', escalar (@x))

12

la sintaxis documentada del operador substr es

substr EXPR,OFFSET,LENGTH,REPLACEMENT 
substr EXPR,OFFSET,LENGTH 
substr EXPR,OFFSET 
no

substr EXPR,ARRAY 

o el más genérico

substr EXPR,LIST 

Esto se refleja en la salida de prototype (aunque no siempre se puede confiar en esto).

$ perl -E'say prototype "CORE::substr"' 
$$;$$ 
  • substr 's primero argumento se evalúa en contexto escalar.
  • substr El segundo argumento se evalúa en contexto escalar.
  • substr El tercer argumento (opcional) se evalúa en contexto escalar.
  • substr El 4 ° argumento (opcional) se evalúa en contexto escalar.

@x en contexto escalar es el número de elementos que contiene (2 en este caso).

Puede lograr lo que desee mediante los siguientes:

sub mysubstr { 
    if (@_ == 2) { substr($_[0], $_[1]) } 
    elsif (@_ == 3) { substr($_[0], $_[1], $_[2]) } 
    elsif (@_ == 4) { substr($_[0], $_[1], $_[2], $_[3]) } 
    else { die } 
} 

my @x = (0, 2); 
mysubstr('abcd',@x) 
+0

1 He aprendido algo nuevo;) – Sorin

+0

Gracias por las respuestas rápidas de iluminación – user1087245