2009-04-10 6 views

Répondre

41

Utilisation substr avec une longueur comme dans:

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

Lookup également perlmonks d'autres solutions.

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

Est une façon de le faire, probablement le plus clair.

Si ce que vous manquait était la valeur numérique et vous ont l'intention de faire ce lots:

unpack("W*","hello") 

Renvoie un tableau de valeurs Char:

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

Pour une bonne Unicode/Utf8 choses que vous pourriez vouloir utiliser

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

Ou 'ord (substr (mainstring de $, $ i, 1))' –

+0

La chose est, généralement lorsque vous voulez que la valeur d'un caractère, vous voulez que la valeur de tous, et une boucle à travers ord (substr()) va être à la fois moins efficace, et plus difficile à lire, et plus difficile à déboguer, que la variante de décompression. –

2

Corol Lary aux autres réponses substr() est que vous pouvez l'utiliser pour définir valeurs à un index également. Il supporte cela comme lvalue ou avec des arguments supplémentaires. C'est aussi très similaire à splice, ce qui est la même chose, mais pour les tableaux.

$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

Quelqu'un doit souligner que 'substr (x, y, z) = foo' est équivalent à' substr (x, y, z, foo) ', mais la dernière notation est recommandée car la première est souvent déroutante pour les débutants. –

+0

Vous venez de le faire! Je pense que j'ai aussi fait dans l'expression «même chose essentiellement». Je supposerais qu'un newb regardant cet exemple lancerait la page de pod pour substr et remarquerait la magie de LVALUE et utiliserait la forme à quatre arguments puisque le formulaire de LVALUE est bizarre et effrayant - et il le dit sur le pod. Peut-être que j'ai trop de foi dans les newbs? – jettero

Questions connexes