2009-04-10 2 views

Antwort

41

Verwenden substr mit der Länge 1, wie in:

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

Auch perlmonks für andere Lösungen Nachschlag.

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

Ist eine Möglichkeit, es zu tun, wahrscheinlich die klarste.

Wenn das, was Sie war der numerischen Wert fehlte und man diese viel zu tun beabsichtigten:

unpack("W*","hello") 

Gibt ein Array von Char-Werte:

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

Für die richtige Unicode/Utf8 Sachen, die Sie verwenden möchten

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

Oder einfach nur 'ord (substr ($ mainstring, $ i, 1))' –

+0

Die Sache ist die, in der Regel, wenn Sie den Wert eines Zeichens wollen, möchten Sie den Wert aller von ihnen, und Schleifen ord (substr()) wird sowohl weniger effizient als auch schwerer zu lesen und schwieriger zu debuggen sein als die unpack-Variante. –

2

Corol Lary zu den anderen substr() Antworten ist, dass Sie es zu Werte an einem Index auch verwenden können. Es unterstützt dies als Lvalue oder mit zusätzlichen Argumenten. Es ist auch sehr ähnlich Spleiß, das ist die gleiche Sache, aber für Arrays.

$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

Jemand sollte darauf hinweisen, dass 'substr (x, y, z) = foo' äquivalent zu' substr (x, y, z, foo) 'ist, aber die letztere Notation wird empfohlen, da die erstere für Neulinge häufig verwirrend ist. –

+0

Du hast es gerade getan! Ich denke, ich habe das auch in dem Satz "im Grunde dasselbe" getan. Ich würde annehmen, dass ein Newb, der dieses Beispiel ansieht, die Pod-Seite für substr startet und die LVALUE-Magie bemerkt und das Formular mit vier Argumenten verwendet, da das LVALUE-Formular seltsam und beängstigend ist - und auf dem Pod steht. Vielleicht habe ich zu viel Vertrauen in die Newbs? – jettero