2016-01-06 63 views
1

簡而言之,我試圖使用一些模塊,他們不工作,沒有警告,錯誤,運行時錯誤,崩潰,沒有,只是沒有結果。具體而言,我有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中的該例程不會返回任何內容。

+0

我不太熟悉PerlApp,因爲我沒有使用ActiveState Perl,但是您是否嘗試過類似的工具,例如[PAR :: Packer](https://metacpan.org/pod/PAR ::帕克)? –

+0

它需要是一個獨立的程序運行在沒有任何版本的Perl安裝的服務器上,但我會研究它,TNX! – user5754171

+0

對,這是PAR :: Packer所做的一件事(特別是'pp'工具)。 –

回答

0

我不是100%肯定的什麼是錯在這裏,但我會檢查以下幾點:

  • 檢查$ S事實上確實包含一些文本(只需添加一個print語句)
  • PerlApp處理utf-8和模塊加載時,perl打包器通常需要比文檔更深入地閱讀文檔。
  • 檢查Lingua :: Identify在運行識別循環之前實際加載了哪些語言,從不假設任何事情!

作爲最後的手段,嘗試使用PAR :: Packer來「編譯」你的程序。

此外,你爲什麼要調用fileasstring()與&約定?

+0

1.絕對。這是調試信息的中間部分,即「Artikel 26」文本,確保我確實具有給定的文本。 – user5754171

+0

Whups,抱歉,不知道發生了什麼事。 – user5754171

+0

...

2.這就是我害怕的,並想知道是否有人有指針/提示/技巧,爲此。

3.我相信*它在內部是這樣做的,但我也必須在某個時候檢查。我運行的是5.20,並且我已經讓人們運行5.16和5.12,我相信,也會嘗試它,所有的不快樂。

這些都必須在沒有任何版本的Perl的服務器上運行,作爲獨立單元。

這是我學習Perl的慣例。 :) – user5754171