Вы забыли один немаловажный момент. Если в decode_json попадает текст, с какими-то проблемами, то вызывается исключение. И оно не отключается. Поэтому для детектирования такой ситуации необходимо «вручную» перехватывать такое исключение. Если я, конечно, пакеты не путаю.
Работа с форматом JSON на языке PERL