1

简而言之,我正在尝试使用一些模块,但它们不起作用,没有警告、错误、运行时错误、崩溃,什么都没有,只是没有结果。具体来说,我有

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 中的例程什么也不返回。

4

1 回答 1

0

我不是 100% 确定这里出了什么问题,但我会检查以下内容:

  • 检查 $s 实际上是否包含一些文本(只需添加一个打印语句)
  • PerlApp 处理 utf-8 和模块加载,perl 打包程序通常需要比他们允许的更彻底的文档阅读。
  • 在运行识别循环之前检查 Lingua::Identify 实际加载了哪些语言,永远不要假设任何东西!

作为最后的手段,尝试使用 PAR::Packer 来“编译”你的程序。

另外,你为什么用 & 约定调用 fileasstring() ?

于 2016-01-07T02:24:39.833 回答