Будет интересно только тем, кто знает, что такое Перл и Юникод. ncurses по умолчанию не поддерживает многобайтные символы, в том числе UTF-8. Начиная с какой-то недавней версии, есть возможность построить отдельную библиотеку, libncursesw вдобавок к обычной libncurses, у которой идентичный интерфейс и встроенная поддержка многобайтных символов.
Однако перловский интерфейс к curses, библиотека Curses, ничего об этом не знает и линкуется всегда с libncurses.
Предположим, я хочу написать программу на Перле, с текстовым интерфейсом через curses, с поддержкой вывода в разных кодировках, в том числе (самое простое и идеальное) utf-8, если терминал поддерживает. Я это не могу сделать, потому что libncurses портит некоторые мультибайтные символы, вставляя вместо них мусор. Стандартный интерфейс к curses-библиотеке ОС, который будет установлен там, где будет бежать моя программа - какой-нибудь линукс или BSD - будет заранее слинкован с libncurses (та часть интерфейса, которая написана на C и компилируется в динамическую библиотеку, которую перл подгружает в рантайме - Curses.so - динамически слинкована с libncurses). Что я могу сделать? Написать новую версию интерфейса Curses, которая линкуется с libncursesw если такая есть, и послать ее мейнтейнеру? Там всего-то менять - список библиотек для поиска, потому что на уровне API библиотеки ncurses и ncursesw совместимы. Но не факт, что он примет; если да, пройдет еще полгода, пока выпустит новую версию, и еще год после этого, пока она войдет в стабильные пакеты основных дистрибутивов. Написать полностью свой интерфейс к libncursesw и включить его в пакет программы? Идиотизм. Включить в пакет программы измененную версию стандартного Curses, которая линкуется с libncursesw, и устанавливать ее в отдельном месте под другим именем? Идиотизм. Ах да, есть еще прелестная возможность хака, скажем, скопировать системный /lib/libncursesw.so.5.5 в отдельную копию в свою директорию, назвать копию libncurses.so.5 (без w), и поставить LD_LIBRARY_PRELOAD так, чтобы она загрузилась вместо обычной libncurses.so.5, когда будет загружаться стандарнтый интерфейс Curses. Причем все работает тогда, я проверил. Но это ж несерьезно.
2006 год на дворе, типа.