2012-01-24 33 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重新堆起來......現在可以工作。簡單。非常感謝您的幫助 !! –