Your first comparison is safe in the sense that it will match only if you actually read the expected FourCC. Since IFF is a binary format, you should already be setting :raw on the file. Otherwise, you may have frame sync problems if bytes above 127 appear in the input, since Perl will read more than 4 octets to get 4 Unicode characters in utf-8. If you really want exactly 4 octets, sysread is defined to read octets, while read is defined to read characters. If :raw is set on the filehandle, characters are octets, but otherwise could be utf-8. Confused yet? (I was confused about this for a long time.)
Unlike Python, Perl strings are always sequences of codepoints, possibly stored using utf-8 if any codepoints exceed 255, otherwise Perl's strings actually are byte arrays, just like C except that there is an explicit length. Note that there are some builtins (vec springs to mind) that always treat strings as byte arrays, even if the utf-8 flag is set.
In reply to Re: read() and string comparison
by jcb
in thread read() and string comparison
by hornpipe2
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |