2009-04-10 8 views

risposta

41

Uso substr di lunghezza 1 come in:

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

Lookup anche perlmonks altre soluzioni.

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

È un modo per farlo, probabilmente il più chiaro.

Se mancasse era il valore numerico e avevate intenzione di fare questo lotti:

unpack("W*","hello") 

restituisce una matrice di valori Char:

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

Per una corretta Unicode/Utf8 roba che potresti voler utilizzare

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

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

+0

Il fatto è che, di solito quando si desidera che il valore di un carattere, si desidera che il valore di tutti loro, e scorrendo ord (substr()) sarà sia meno efficiente, sia più difficile da leggere e più difficile da eseguire il debug rispetto alla variante di decompressione. –

2

Corol lary alle altre risposte di substr() è che è possibile utilizzarlo per impostare anche i valori in un indice. Supporta questo come lvalue o con argomenti extra. È anche molto simile alla giunzione, che è la stessa cosa, ma per gli array.

$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

Qualcuno dovrebbe indicare il 'substr (x, y, z) = pippo' è equivalente a' substr (x, y, z, pippo) ', ma la seconda notazione è raccomandata in quanto la prima confonde spesso i neofiti. –

+0

Hai appena fatto! Penso di aver fatto anche nella frase "la stessa cosa in sostanza". Suppongo che una newb che guardi questo esempio possa aprire la pagina pod per substr e notare la magia LVALUE e usare la forma a quattro argomenti poiché la forma LVALUE è strana e spaventosa - e lo dice sul pod. Forse ho troppa fiducia nei novizi? – jettero

Problemi correlati