2012-01-24 35 views
3

内的输出脚本我有一个非常奇怪的问题,但只有在运行Ubuntu时(在CentOS evertyhing正在运行)。 我在Perl中创建了一个脚本,并使用了Mail::IMAPClient模块。Perl PP正在搜索/ script/

当我运行下面的命令:

pp -o myapp perlscript.pl 

一切工作,但是当我试图执行二进制脚本(MYAPP),它给了我下面的错误:

Cannot connect through IMAPClient: No such file or directory at script/perlscript.pl line 22. 

但是当我运行perlscript.pl时一切正常......
你知道为什么吗?

脚本:

#!/usr/bin/perl 

use strict; 
use Mail::IMAPClient; 
use Data::Dumper; 
use MIME::QuotedPrint(); 

$|=1; 

# Vars 
my $odate = `date +'%d/%m/%Y'`; chomp($odate); 
    $odate = '15/01/2012'; 
my $timeout = 120; 

# Connect to IMAP server 
my $imap = Mail::IMAPClient->new(
    Server => 'imap.gmail.com', 
    User  => '[email protected]', 
    Password => 'my_password', 
    Port  => 993, 
    Ssl  => 1, 
) 
    or die "Cannot connect through IMAPClient: $!"; 
+0

你忽视提供必要的信息,以便我们[重现问题](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow)。粘贴你的程序将是一个好的开始,所以你可以看到第22行的错误消息是什么,直到那时,只有猜测是可能的。 – daxim

+0

编辑页面....第22行是“my $ imap = Mail :: IMAPClient-> new(” –

回答

4

你正在做错误检查错误的方式。 You must inspect [email protected],而不是$!,为构造函数。运行修改后的程序(尚未与PP编译)给出有用的错误消息:

Cannot connect through IMAPClient: Unable to connect to imap.gmail.com: Unable to load 'IO::Socket::SSL': Can't locate IO/Socket/SSL.pm in @INC (@INC contains: …) at (eval 7) line 2.

好像你忘了告诉编译器add the hidden dependency它无法自行检测。

+0

我同意daxim。错误信息来自你的'die'语句,它仅仅意味着对' Mail :: IMAPClient'没有被创建,如果你查看[Errors]下的Mail :: IMAPClient文档(http://search.cpan.org/dist/Mail-IMAPClient/lib/Mail/IMAPClient.pod #Errors)部分,你会发现你需要检查'$ @',因为该对象没有被创建(这会允许你使用[LastError](http://search.cpan.org/dist/) Mail-IMAPClient/lib/Mail/IMAPClient.pod#LastError)方法) –

+0

要扩展daxim的答案,请使用以下命令编译您的应用程序:'pp -z 9 -M IO :: Socket :: SSL -o myapp ''-z 9''用于减小二进制大小 – Stamm

+0

其实代码示例是从谷歌某处复制来的,我从来没有看过$ !,我已经添加了“使用IO :: Socket :: SSL”和com重新堆起来......现在可以工作。简单。非常感谢您的帮助 !! –