unpack関数で部分文字列抽出

substr関数でなくても、unpack関数で文字列の部分抽出が可能です。
ただし、Unicode(マルチバイトデータ)文字列では、期待通りに動きません。

unpack(TEMP, EXPR)
# 文字列EXPRを受け取って、TEMPに従って位置を決める。

TEMP文字

  • x -> スキップするバイト数
  • X -> スキップバックするバイト数
  • A -> 抽出するバイト数
#!/usr/bin/perl

use strict;
use warnings;

my $string = "There\'s More Than One Way To Do It";
my $a = unpack("x8 A4", $string);
# 8bytesスキップして、4bytes抽出
print "$a\n";   # More

my $b = unpack("x22 X4 A3", $string);
# 22bytesスキップして、4bytes戻り、3bytes抽出
print "$b\n";   # One