使用Perl解压缩不均匀的字节数

时间:2018-04-04 06:23:49

标签: perl pack unpack

有没有办法强制解压缩将单个字节视为“空填充”短路,同时解压缩具有不均匀字节数的标量?

示例代码:

my $input = 'abcde';
foreach (unpack 'S*', $input) {
    print "$_ ";
}

# Result:
# 25185 25699

# Expected result:
# 25185 25699 101

我知道有可能检查标量的长度并附加它以防它不均匀,如下所示,但是有一种更清洁的方式我可以在需要时自动解压缩它吗?

# What I'm trying to avoid before running unpack:

if (length($input) % 2)) {
    $input .= "\0";
}

1 个答案:

答案 0 :(得分:7)

每次都可以添加空字节,当字节数是偶数时,它将被忽略。

#!/usr/bin/perl
use warnings;
use strict;

use Test::More tests => 2;

sub Unpack {
    my $input = shift;
    [ unpack 'S*', "$input\0" ]
}

is_deeply Unpack("abcde\0"), [25185, 25699, 101];
is_deeply Unpack("abcde"),   [25185, 25699, 101];