Если вы не скажете Perl, что исходный код скрипта находится в utf8, Perl предполагает ASCII. Это означает, что по умолчанию интерпретатор Perl видит ?
как 4 отдельных символа. Если вы измените один вкладыш на perl -Mutf8 -lwe 'print length("?")'
Вы увидите длину, обеспечивающую ожидаемый результат.
Прагма utf8 сообщает Perl, что исходный модуль находится в utf8, а не в ASCII. См. perldoc utf8
для получения дополнительной информации.