약간 정신이 없는 상태에서 일을 했더니만 결국은 삽질로 빠지는 경우가 많습니다.
오늘의 삽질은 perl 에서 ord의 사용에 관한 것이지요.
그 동안 compiler에 의하여 생성된 elf 파일을 objcopy utility로 binary file을 생성하고, 이걸 perl에서 $hexval = ord(getc(INHANDLE));
과 같은 방법으로 verilog HDL에서 읽을 수 있는 파일 형식(readmemh()를 이용하는 거죠..)으로 변경해서 사용해 왔는데, 오늘 갑자기 이걸 sub routine으로 만들고 돌렸더니만 값이 이상하더군요.
그래서 해당 서브 루틴을 따로 빼서, 프로그램을 돌려 봤더니만 정상! @_@
한참을 헤매다가, Perl/Tk의 GUI에서 한글을 사용하기 위해서use encoding ‘utf-8’
을 사용했다는 것을 깨달았습니다. ord
는 encoding이 없을때는 binary를 hex값으로 바꿀때 상당히 유용하지만(ascii를 return하기 때문이지요), unicode setting에서는 binary를 해석해서 128보다 큰 값이면 unicode로의 변환을 시도하는 거죠 ㅠㅠ;
결국은 mwultong님의 blog에 있는 hex code conversion 부분의 코드를 일부 차용하여 프로그램을 변환 프로그램을 돌렸습니다.
buf16Array = unpack “C*”, $buf16; # 이 부분이 핵심이죠.. ^^;
역시 뭔가를 가정하고 만드는 건 좀 위험한 생각이었던거 같습니다. 저 프로그램에서 unicode를 사용하게 될 것이라고는 전혀 생각하지 않았었으니까요.. 실용주의 프로그래머라는 책을 보면 unicode를 항상 고려하라고 하던데, 이 규칙을 위배한 것이 문제겠지요.
여하튼, 심각한 삽질하지 않고 끝나서 다행입니다요~잇힝~