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

1 perl unpack pack

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

示例代码:

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

# Result:
# 25185 25699

# Expected result:
# 25185 25699 101
Run Code Online (Sandbox Code Playgroud)

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

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

if (length($input) % 2)) {
    $input .= "\0";
}
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 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];
Run Code Online (Sandbox Code Playgroud)