在谷歌中找不到答案,我自己也弄不明白。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,蒂莫