in reply to Understanding pack syntax

What is your doubt exactly? pack explains quite well what the different transformation letters do to the input.

About the logic, I observe that if the length of $data_val can be expressed using a single octet (i.e. is less than 256), you can encode it using a single char. Otherwise, you need to encode it as a string, so you keep char 0xff (AKA 255) to signal this different behaviour and then use "s" encoding. Of course, this special "escaping" semantic assigned to 255 does not allow you to use it for immediate encoding when length equals 255, so you restrict the test to lengths strictly less than 255.

Flavio
perl -ple'$_=reverse' <<<ti.xittelop@oivalf

Don't fool yourself.