This function is similar to a string eval, except it always parses its argument (or $_ if EXPR is omitted) as a string of independent bytes.
If called when use utf8
is in effect, the string will be assumed
to be encoded in UTF-8, and evalbytes
will make a temporary copy to
work from, downgraded to non-UTF-8. If this is not possible
(because one or more characters in it require UTF-8), the evalbytes
will fail with the error stored in $@
.
Bytes that correspond to ASCII-range code points will have their normal meanings for operators in the string. The treatment of the other bytes depends on if the 'unicode_strings" feature is in effect.
Of course, variables that are UTF-8 and are referred to in the string retain that:
- my $a = "\x{100}";
- evalbytes 'print ord $a, "\n"';
prints
- 256
and $@
is empty.
Source filters activated within the evaluated code apply to the code itself.
evalbytes is available starting in Perl v5.16. To
access it, you must say CORE::evalbytes
, but you can omit the
CORE::
if the
evalbytes feature
is enabled. This is enabled automatically with a use v5.16
(or
higher) declaration in the current scope.