无法在Google找到答案,也无法自己弄明白。 Win7 64bit 这是为活动状态的MSWin32-x86-multi-thread-64int构建的perl 5,版本22,subversion 3(v5.22.3) 模块List :: BinarySearch和PAR :: Packer随cpan一起安装
想法是编辑文本文件并按排序顺序添加数字。以下是重现问题的简短版本。
问题:binsearch_pos在我将脚本作为pl运行时起作用,但是当我从中创建一个独立的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&gt; test.pl 012456 0123456
EXE创作: pp -o test.exe test.pl
EXE输出:
C:\用户\蒂莫&GT; TEST.EXE Scalar找到了运算符在脚本 /test.pl第17行附近的位置,靠近&#34;} $ add&#34; (在$ add之前缺少运算符?)脚本/ test.pl第17行的语法错误,接近&#34;} $ add&#34;全球符号&#34; $ idx&#34;要求 显式包名(你忘了宣布&#34;我的$ idx&#34;?)at script / test.pl第18行。全局符号&#34; $ idx&#34;需要明确的包装 名字(你忘记在script / test.pl第19行声明&#34;我的$ idx&#34;?) 全球符号&#34; $ idx&#34;需要明确的包名(你忘记了吗? 在script / test.pl第21行声明&#34;我的$ idx&#34;?)全局符号&#34; $ idx&#34; 需要明确的包名(你忘了申报&#34;我的$ idx&#34;?) 在script / test.pl第22行。
当使用perl2exe或pp进行EXE时,我得到同样的错误。这可能是因为某些其他版本的binsearch_pos潜伏在某个地方吗?
我输了。
BR, 蒂莫