2009-04-10 6 views

답변

41

사용 substr :

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

또한 다른 솔루션에 대한 perlmonks를 조회.

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

한 가지 방법은 아마도 가장 명확 할 것입니다.

것은 당신이 원하는 있었는지하면하면 숫자 값이고이 많이 할 것을 예정했다 :

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

적절한 유니 코드/UTF8의 경우 :

unpack("W*","hello") 

는 char 값의 배열을 돌려줍니다 쓸만한 것들

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

또는 단지'ORD (SUBSTR ($의 mainstring, $ I, 1))' –

+0

것은 당신이 한 문자의 값을 할 때 일반적으로, 당신은 그들 모두의 값을 원하고 통해 반복이다 ord (substr())는 언팩 (unpack) 변형보다 덜 효율적이고, 읽기가 어렵고, 디버그하기가 어려울 것입니다. –

2

코올 다른 substr() 대답에 대한 lary는 에 인덱스를 사용하여 값을 설정할 수도 있습니다. 그것은 lvalue 또는 추가 인수로 이것을 지원합니다. 또한 스플 라이스와 매우 비슷합니다. 스플 라이스는 배열과 동일합니다.

$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

누군가는'substr (x, y, z) = foo'가'substr (x, y, z, foo)'와 동일하다는 것을 지적해야하지만, 전자는 종종 초보자에게 혼란을주기 때문에 후자의 표기법을 권장합니다. –

+0

방금 ​​했어! 나는 또한 "기본적으로 같은 말"이라고 생각했다. 나는이 예제를보고있는 초보자가 substr에 대한 pod 페이지를 실행하고 LVALUE 마술에 주목하고 LVALUE 양식이 이상하고 무서운 4 가지 형식을 사용한다고 가정합니다. 아마 신생아에 대한 믿음이 너무 많습니까? – jettero

관련 문제