2009-04-10 8 views

Respuesta

41

Uso substr con longitud 1 como en:

$nth = substr($string, n-1, 1); 

También Lookup perlmonks para otras soluciones.

21
$char = substr($mainstring, $i , 1); 

Es una forma de hacerlo, probablemente el más claro.

Si lo que faltó fue el valor numérico y que tenían la intención de hacer esto lotes:

unpack("W*","hello") 

devuelve una matriz de valores de Char:

print join ",", unpack("W*","hello") ; 
# 104,101,108,108,111 

Para Unicode adecuada/Utf8 cosas que puede utilizar

use utf8; 
unpack("U*","hello\0ƀ\n") 
# 104,101,108,108,111,0,384,10 
+0

O simplemente 'ord (substr ($ mainstring, $ i, 1))' –

+0

La cosa es, por lo general cuando se desea que el valor de un carácter, desea que el valor de todos ellos, y un bucle a través ord (substr()) será menos eficiente, más difícil de leer y más difícil de depurar que la variante desempaquetar. –

2

Corol Lary a las otras respuestas substr() es que usted puede usarlo para establecer valores en un índice también. Es compatible con esto como lvalue o con argumentos adicionales. También es muy similar al empalme, que es lo mismo, pero para matrices.

$string = "hello"; 
substr($string, 2, 2) = "this works?"; 
substr($string, 2, 2, "same thing basically"); 
@a = qw(s t r i n g s a n d t h i n g s); 
@cut_out = splice(@a, 2, 2); 
@cut_out = splice(@a, 2, 2, @replacement); 
+0

Alguien debe señalar que 'substr (x, y, z) = foo' es equivalente a' substr (x, y, z, foo) ', pero se recomienda la última notación ya que la primera suele confundir a los novatos. –

+0

¡Acabas de hacerlo! Creo que también lo hice en la frase "básicamente". Supongo que un principiante que mire este ejemplo encendería la página de pod para substr y notará la magia LVALUE y usará la forma de cuatro argumentos ya que la forma LVALUE es extraña y aterradora, y así lo dice en el pod. Quizás tengo demasiada fe en los newbs? – jettero

Cuestiones relacionadas