title: Split binary data into byte array in Perl
body: <p>I basically wanted to convert a binary string to an array/list of bytes (<em>so as to allow indexing, and avoid using <code>substr</code>, because its syntax complicates things for me</em>), and I came up with the following <a href="https://tex.meta.stackexchange.com/questions/228/ive-just-been-asked-to-write-a-minimal-example-what-is-that/231#231">MWE</a>:</p>
  
  <pre><code>#!/usr/bin/env perl
  
  use warnings;
  use strict;
  
  # Use open ':raw';      # Unknown PerlIO layer class ':raw'
  use open IO =&gt; ':raw';
  
  binmode(STDIN);
  binmode(STDOUT);
  
  # Create original 8-bit byte array/list
  my @atmp = (0x80, 0x23, 0x14, 0x0d, 0x0a, 0x00, 0x00, 0x80, 0x43, 0x00, 0x00);
  
  # Make a copy of portion
  my @atmp2 = (0) x 2;
  @atmp2[0..1] = @atmp[7..8];
  
  # Print output
  print "Copied atmp2 contents as hex: " . join(", ", unpack("H2"x2, pack("C"x2,@atmp2))) . "\n";
  print "Copied atmp2 as ushort (16bit) int: " . unpack("S", pack("C"x2, @atmp2));
  # doublecheck value by routing through printf with format specifier:
  printf(" [%d]\n", unpack("S", pack("C"x2, @atmp2)));
  
  
  # Now, the same data as string:
  my $indata = "\x80\x23\x14\x0d\x0a\x00\x00\x80\x43\x00\x00";
  
  # Create byte array (by converting string $indata to array/list with `split`)
  my @btmp = split('',$indata);
  print "lastindex: " . $#btmp . "\n";
  
  # Make a copy of portion
  my @btmp2 = (0) x 2;
  @btmp2[0..1] = @btmp[7..8];
  
  # Print output
  print "Copied btmp2 contents as hex: " . join(", ", unpack("H2"x2, pack("C"x2,@btmp2))) . "\n";
  print "Copied btmp2 as ushort (16bit) int: " . unpack("S", pack("C"x2, @btmp2));
  # doublecheck value by routing through printf with format specifier:
  printf(" [%d]\n", unpack("S", pack("C"x2, @btmp2)));
  </code></pre>
  
  <p>Running this code results with:</p>
  
  <pre><code>$ perl test.pl
  Copied atmp2 contents as hex: 80, 43
  Copied atmp2 as ushort (16bit) int: 17280 [17280]
  lastindex: 10
  Argument "M-\0" isn't numeric in pack at test.pl line 38.
  Argument "C" isn't numeric in pack at test.pl line 38.
  Copied btmp2 contents as hex: 00, 00
  Copied btmp2 as ushort (16bit) int: 0 [0]
  </code></pre>
  
  <p>How do I get the second part (btmp2) to behave the same as the first part (atmp2)?</p>