1. "인간에게 의미있는 정보를 담고 있는 추상적인 문자열"과 "컴퓨터가 그 정보를 저장하기 위해 사용하는 구체적인 바이트 덩어리"를 구분해서 생각해야 한다. (사용자는 그럴 이유가 없지만 프로그래머는 그래야 한다) 2. Perl 은 "문자열"을 다룰 수 있으나, 기본적으로 우리가 작성해서 저장한 펄 스크립트는 "바이트 덩어리" 형태로 저장되어 있고, 따라서 별도의 지시가 없으면 바이트 단위로 연산을 하게 된다. 3. 안타깝게도 한글은 한개의 "문자"가 한개의 "바이트"에 대응되지 않기 때문에, 문제가 생긴다. 4. 따라서 Perl 프로그램 내에서 한글 영문을 가리지 않고 "문자열"로써 다루고자 하면 바이트 덩어리를 문자열로 변환, 즉 디코드해야 한다. 5. 일단 디코드된 문자열은, 정규식이나 각종 스트링 관련 함수에서 정확히 의미에 맞게 다룰 수 있다. 6. 문자열을 외부에 출력하기 전에는 다시 바이트 덩어리로 인코드해야 한다. 또 외부에서 입력을 받을 때도 바이트 덩어리 형태로 들어온다는 걸 염두에 둬야 한다.
:encoding(cp949)
<>
utf8
1. 파일을 읽을 때는 파일의 내용은 바이트 덩어리이고, 이걸 문자열로써 다루기 위해서는 디코드해야 한다. * 읽고 나서 읽은 내용을 decode()를 써서 디코드하거나, * 읽을 파일 핸들에 binmode() 를 써서 입력 레이어를 삽입하여 자동으로 디코드 하거나 * 읽을 파일을 여는 시점에 open()의 인자로 입력 레이어를 명시해주거나 * open()을 하기 전에 미리 use open 프라그마를 써서 디폴트 레이어를 명시해 줄 수 있다 2. 문자열을 다룬 후에 파일에 저장할 때는 내가 희망하는 형태의 바이트 덩어리로 인코딩해야 한다 * 쓰기 전에 쓸 내용을 encode()를 써서 인코드하거나, * 쓸 파일 핸들에 binmode() 를 써서 출력 레이어를 삽입하여 자동으로 인코드 하거나 * 쓸 파일을 여는 시점에 open()의 인자로 출력 레이어를 명시해주거나 * open()을 하기 전에 미리 use open 프라그마를 써서 디폴트 레이어를 명시해 줄 수 있다 3. "<>"는 파일핸들이 명시되지 않으니 use open을 써서 입력 레이어를 명시하면 된다 4. 프로그램 코드 내에 있는 문자열 상수는 use utf8 프라그마를 써서 자동으로 디코드된 상태로 사용할 수 있다.