Perl работает, Perlapped Exe не

Короче говоря, я пытаюсь использовать некоторые модули, и они не работают, нет предупреждений, ошибок, ошибок времени выполнения, сбоев, ничего, просто нет результатов. Конкретно у меня есть

use strict;
use warnings;
use Lingua::Identify qw(:language_identification);

...

foreach my $f ( @txt ){
    my $s = &fileasstring( $f );
    my @l = langof( $s );           #  problem's here!
    &error( "!\nl=".scalar(@l)."\n" );
    foreach( @l ){ &error( "!$f\t[$_]\n" ); }
    &error( "\n" );
    }

и результат запуска 'perl langs.pl'

[da.txt]  reading file
[da.txt]    8 lines read
[da.txt]  done

da.txt  [Artikel 26. Enhver har ret til undervisning.  ...  som vedkommende har skabt.  ]

l=42
da.txt  [da]
da.txt  [0.278009331769791]
da.txt  [sv]
da.txt  [0.126520770367313]
da.txt  [nl]
da.txt  [0.0886509276813543]
...

и при запуске "langs.exe", который, казалось бы, просто отлично, я получаю

[da.txt]  reading file
[da.txt]    8 lines read
[da.txt]  done

da.txt  [Artikel 26. Enhver har ret til undervisning.  ...  som vedkommende har skabt.  ]

l=0

и все, нет возвращаемых значений из langof(), просто пустой массив.

Приведенная выше информация об отладке показывает, что файл был прочитан правильно (по одному для da, de, en, es, fr и нескольких других языков), поэтому он, по крайней мере, проходит через движения, но, очевидно, perlapp находит модули достаточно хорошо, чтобы не выбрасывать ошибки или предупреждения при компиляции или во время выполнения, но при компиляции эта подпрограмма в Identify просто ничего не возвращает.

1 ответ

Я не уверен на 100%, что здесь не так, но я бы проверил следующее:

  • Убедитесь, что $s на самом деле содержит некоторый текст (просто добавьте оператор печати)
  • PerlApp обрабатывает utf-8 и загружает модули, упаковщики perl обычно требуют гораздо более тщательного прочтения документации, чем позволяют.
  • Проверьте, какие языки Lingua::Identify действительно загружены, прежде чем запускать цикл идентификации, никогда не предполагайте ничего!

В крайнем случае попробуйте использовать PAR::Packer для "компиляции" вашей программы.

Кроме того, почему вы вызываете fileasstring() с соглашением &?

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