Собственно, здравствуйте. Заранее извиняюсь, если кому-то уже надоела, но тем не менее, прошу помощи...
Дело то вот в чем. Понадобилось раскодировать base64, стандартный mime:base64 не раскодировал толком utf-8, мучилась с encode, decode, в результате плюнула и написала небольшую функцию для раскодировки base64 (по аналогии с javascript)
sub base64decode {
my ($str) = @_;
$b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
$b64decoded = '';
for ($i = 0; $i < length $str;) {
$enc1 = index ($b64chars,substr($str, $i++, 1));
$enc2 = index ($b64chars,substr($str, $i++, 1));
$enc3 = index ($b64chars,substr($str, $i++, 1));
$enc4 = index ($b64chars,substr($str, $i++, 1));
$chr1 = ($enc1 << 2) | ($enc2 >> 4);
$chr2 = (($enc2 & 15) << 4) | ($enc3 >> 2);
$chr3 = (($enc3 & 3) << 6) | $enc4;
$b64decoded = $b64decoded . chr($chr1);
if ($enc3 < 64) {
$b64decoded .= chr($chr2);
}
if ($enc4 < 64) {
$b64decoded .= chr($chr3);
}
}
return $b64decoded;
}
При использовании опции -w, перл недовольно ворчит предупреждением, дескать, вот тут
$enc4 = index ($b64chars,substr($str, $i++, 1));
мы вышли за строку. Как так, ума не приложу, хотя скрипт отрабатывает, как надо. Подскажите, в чем дело, пожалуйста.