Компиляция скрипта Perl в ошибку .exe - PullRequest
1 голос
/ 26 февраля 2012

Я пытаюсь создать .exe в Perl.Он работает нормально, пока я не попытаюсь скомпилировать его в исполняемый файл.Я использую Komodo IDE 5. Я разместил свой скрипт и ошибку ниже.Я добавил модули LWP :: UserAgent, NET и Google :: Voice, и он все еще не работает.Я использую Perlapp для создания .exe

#!/usr/bin/perl -w
use strict;
use warnings;
use Google::Voice;
use Date::Calc qw(Delta_Days);
use Net::Twitter;

#Set Days
    my @today = (localtime)[5,4,3];
    $today[0] += 1900;
    $today[1]++;
    my @RT = (2012, 7, 7);
    my $days = Delta_Days(@today, @RT);

#Get Quotes and Phone Numbers
    open FILE, "c:/Countdown/countdownNumbers.txt" or die "Couldn't open file: $!"; 
    my $numbers = join("", <FILE>); 
    close FILE;
    open FILETWO, "c:/Countdown/Quotes.txt" or die "Couldn't open file: $!"; 
    my $quotes = join("", <FILETWO>); 
    close FILETWO;

#Create Arrays and Lengths
    my @numbersArray = split(/[\n\r\l]+/, $numbers);
    my @quotesArray = split(/[\n\r\l]+/, $quotes);
    my $length = @numbersArray;
    my $QuotesLength = @quotesArray;

#Send Text Message
    for(my $i = 0; $i < $length; $i++){
        my $g = Google::Voice->new->login('secret', 'secret'); 
        $g->send_sms($numbersArray[$i] => "      Countdown\nDays Left: " . $days . "\n Quote:\n" . $quotesArray[0]);
    }


#Send Twitter Message
    my $nt = Net::Twitter->new(
        traits   => [qw/OAuth API::REST/],
        consumer_key        => 'secret',
        consumer_secret     => 'secret',
        access_token        => 'secret',
        access_token_secret => 'secret'
    );
    my $result = $nt->update($days .' Days left!');
    $result = $nt->update('Quote: ' . $quotesArray[0]);

#Rewrite the file and close it
    open FILETWO, ">c:/Countdown/Quotes.txt";
    for(my $i = 1; $i < $QuotesLength; $i++){
        print FILETWO $quotesArray[$i] . "\n";
    }
    close FILETWO;

ошибки

Algorithm\Diff\XS.pm:
    error: Can't locate Algorithm\Diff\XS.pm
    refby: C:\Perl\site\lib\Array\Diff.pm line 7
Date\Calc\XS.pm:
    error: Can't locate Date\Calc\XS.pm
    refby: C:\Perl\lib\Date\Calc.pm line 26
I18N\Langinfo.pm:
    error: Can't locate I18N\Langinfo.pm
    refby: C:\Perl\lib\Encode\Locale.pm line 51
JSON\PP58.pm:
    error: Can't locate JSON\PP58.pm
    refby: C:\Perl\lib\JSON\PP.pm
Net.pm:
    error: Can't locate Net.pm
    refby: perlapp --add Net::

Can't locate Mojo/EventEmitter.pm in @INC (@INC contains:) at /<C:\Users\Chris\Desktop\Countdown\RT.exe>Mojo/Base.pm line 32.
BEGIN failed--compilation aborted at /<C:\Users\Chris\Desktop\Countdown\RT.exe>Mojo/UserAgent.pm line 2.
BEGIN failed--compilation aborted at /<C:\Users\Chris\Desktop\RTCountdown\RT.exe>Google/Voice.pm line 6.
BEGIN failed--compilation aborted at RT.pl line 4.

Ответы [ 3 ]

3 голосов
/ 26 февраля 2012

Компиляция сценария perl в exe-файл не так проста, я боюсь. ) Проверьте это обсуждение в Perlmonks для деталей.

Из того, что вы цитировали, кажется, что вы можете начать исправлять это с установки дополнительных модулей: Algorithm :: Diff :: XS, Date :: Calc :: XS и т. Д.

2 голосов
/ 26 февраля 2012

Если вы используете последнюю версию perlapp, отправьте эту ошибку в службу поддержки ActiveState.

Временно вы можете использовать PAR :: Packer вместо perlapp. Установите PAR :: Packer с оболочкой cpan (ppm может не работать). Затем запустите

pp -c t1.pl

Это создаст a.out. Если это не сработает, установите Module :: ScanDeps из svn: http://svn.openfoundry.org/par/Module-ScanDeps/trunk/ - я исправил пару возможных проблем для вашей программы.

Я никогда не использовал perlapp, но у него могут быть переключатели командной строки для предоставления списка модулей для включения.

1 голос
/ 06 сентября 2012

Я скачал Langinfo.pm из http://search.cpan.org/src/RJBS/perl-5.16.1/ext/I18N-Langinfo/Langinfo.pm в C:\Perl\lib\I18N и все работает.

  • Komodo IDE, версия 6.1.3
  • Perl Dev Kit Pro v9.1.1.
  • ActivePerl-5.14.2.1402-MSWin32-x86-295342
...