vec

Treats the string in EXPR as a bit vector made up of elements of
width BITS and returns the value of the element specified by OFFSET
as an unsigned integer. BITS therefore specifies the number of bits
that are reserved for each element in the bit vector. This must
be a power of two from 1 to 32 (or 64, if your platform supports
that).

If BITS is 8, "elements" coincide with bytes of the input string.

If BITS is 16 or more, bytes of the input string are grouped into chunks
of size BITS/8, and each group is converted to a number as with
pack/unpack with
big-endian formats n
/N
(and analogously for BITS==64). See
pack for details.

If bits is 4 or less, the string is broken into bytes, then the bits
of each byte are broken into 8/BITS groups. Bits of a byte are
numbered in a little-endian-ish way, as in 0x01
, 0x02
,
0x04
, 0x08
, 0x10
, 0x20
, 0x40
, 0x80
. For example,
breaking the single input byte chr(0x36) into two groups gives a list
(0x6,0x3)
; breaking it into 4 groups gives (0x2,0x1,0x3,0x0)
.

vec may also be assigned to, in which case
parentheses are needed
to give the expression the correct precedence as in

If the selected element is outside the string, the value 0 is returned.
If an element off the end of the string is written to, Perl will first
extend the string with sufficiently many zero bytes. It is an error
to try to write off the beginning of the string (i.e., negative OFFSET).

If the string happens to be encoded as UTF-8 internally (and thus has
the UTF8 flag set), vec tries to convert it
to use a one-byte-per-character internal representation. However, if the
string contains characters with values of 256 or higher, that conversion
will fail. In that situation, vec will operate on the underlying buffer
regardless, in its internal UTF-8 representation.

Strings created with vec can also be
manipulated with the logical
operators |, &
, ^, and ~
. These operators will assume a bit
vector operation is desired when both operands are strings.
See Bitwise String Operators in perlop.

The following code will build up an ASCII string saying 'PerlPerlPerl'
.
The comments show the string after each step. Note that this code works
in the same way on big-endian or little-endian machines.