0

在谷歌中找不到答案,我自己也弄不明白。Win7 64bit 这是为 MSWin32-x86-multi-thread-64int 构建的 perl 5,版本 22,subversion 3 (v5.22.3),带有模块 List::BinarySearch 和 PAR::Packer 与 cpan 一起安装

想法是编辑文本文件并按排序顺序添加数字。下面是一个简短的版本,只是为了重现问题。

问题:当我将脚本作为 pl 运行时,binsearch_pos 可以工作,但当我用它制作独立的 EXE 时会失败。

重现代码:

    #!\usr\bin\perl
use strict;
use warnings;
use List::BinarySearch qw/binsearch_pos/;

my @numbers=(0,1,2,4,5,6);
print @numbers;
print "\n";
@numbers=searchandadd(\@numbers,3);
print @numbers;

#search right idx and add value
sub searchandadd {
    my ($array, $add) = @_;
    my @array = @{$array};
    my @sorted = sort { $a <=> $b } @array;
    my $idx = binsearch_pos { $a <=> $b } $add, @sorted;
    if (0+@sorted == $idx) {
        splice @sorted, $idx, 0, $add;
    } else {
        splice @sorted, $idx, 0, $add
        if $sorted[$idx] ne $add;
    }
    return @sorted;
}

预期输出(当前来自 test.pl):

C:\Users\timo>test.pl 012456 0123456

EXE创建:pp -o test.exe test.pl

可执行文件输出:

C:\Users\timo>test.exe 标量在脚本/test.pl 第 17 行,“} $add”附近找到运算符预期的位置($add 之前缺少运算符?)脚本/test.pl 第 17 行附近的语法错误"} $add" 全局符号 "$idx" 在 script/test.pl 第 18 行需要明确的包名(你忘了声明“my $idx”吗?)。全局符号 "$idx" 需要明确的包名(你是忘记在 script/test.pl 第 19 行声明“my $idx”?)在 script/test.pl 第 21 行,全局符号“$idx”需要明确的包名(您是否忘记声明“my $idx”?) . 全局符号“$idx”需要在 script/test.pl 第 22 行明确的包名(你忘了声明“my $idx”吗?)。

使用 perl2exe 或 pp 制作 EXE 时出现同样的错误。这可能是因为在某处潜伏着其他版本的 binsearch_pos 吗?

我迷路了。

BR,蒂莫

4

0 回答 0