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

Unpack uneven amount of bytes with Perl

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

示例代码:

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

# Result:
# 25185 25699

# Expected result:
# 25185 25699 101

我知道可以检查标量的长度并附加它以防它不均匀,如下所示,但是有没有更简洁的方法可以让 unpack 在需要时自动处理它?

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

if (length($input) % 2)) {
    $input .= "[=11=]";
}

每次都可以加上空字节,当字节数为偶数时会忽略

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

use Test::More tests => 2;

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

is_deeply Unpack("abcde[=10=]"), [25185, 25699, 101];
is_deeply Unpack("abcde"),   [25185, 25699, 101];