2016-01-06 2 views
1

Вкратце, я пытаюсь использовать некоторые модули, и они не работают, никаких предупреждений, ошибок, ошибок времени выполнения, сбоев, ничего, просто никаких результатов. В частности, у меня естьperl works, 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(), просто пустой массив.

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

+0

Я не слишком знаком с PerlApp, потому что я не использую ActiveState Perl, но вы попробовали аналогичный инструмент, например [PAR :: Packer] (https://metacpan.org/pod/PAR :: Упаковщик)? –

+0

Это должна быть отдельная программа для запуска на серверах, у которых не было бы никакой версии perl, но я рассмотрю ее, tnx! – user5754171

+0

Правильно, это одна из вещей, которые PAR :: Packer делает (в частности, инструмент 'pp'). –

ответ

0

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

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

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

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

+0

1. Абсолютно. Это средняя часть информации для отладки, текст «Artikel 26», убедившись, что у меня действительно есть текст. – user5754171

+0

Whups, извините, не знаю, что произошло. – user5754171

+0

...

2. Вот чего я боюсь, и мне было интересно, есть ли у кого-то указатели/советы/трюки с этой целью.

3. Я * считаю, что он делает это внутренне, но я должен был проверить это в какой-то момент. Я работаю 5.20, и, как я считаю, люди, которые работают с 5.16 и 5.12, тоже стараются, без всякой радости.

Все они должны запускаться на серверах без какой-либо версии perl, как автономные устройства.

Это было соглашение, с которым я узнал perl. :) – user5754171