Perl: Скаляр обнаружил, где ожидается оператор в сценарии

Не могу найти ответ в Google, ни понять это сам. Win7 64bit Это perl 5, версия 22, subversion 3 (v5.22.3), созданная для MSWin32-x86-multi-thread-64int из активного состояния с модулями 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> test.pl 012456 0123456

Создание EXE-файла: pp -o test.exe test.pl

Вывод EXE:

C: \ Users \ timo> test.exe Скаляр обнаружил, где ожидался оператор в строке 17 script /test.pl, рядом с синтаксической ошибкой "} $add" (отсутствует оператор до $add?) В строке 17 script/test.pl, рядом "} $ add" Глобальный символ "$idx" требует явного имени пакета (вы забыли объявить "мой $idx"?) в строке script/test.pl 18. Глобальный символ "$idx" требует явного имени пакета (вы забудьте объявить "my $idx"?) в строке script/test.pl 19. Глобальный символ "$idx" требует явного имени пакета (вы забыли объявить "my $idx"?) в строке script/test.pl 21 Глобальный символ "$idx" требует явного имени пакета (вы забыли объявить "мой $idx"?) В ​​строке 22 script/test.pl.

Я получаю ту же ошибку, когда EXE создается с помощью perl2exe или pp. Может ли это быть из-за того, что где-то скрывается какая-то другая версия binsearch_pos?

Я потерялся.

БР, Тимо

0 ответов

Другие вопросы по тегам