Что означает этот крах Perl? - PullRequest
0 голосов
/ 30 ноября 2011

Может кто-нибудь сказать мне, что это значит?

if (not defined $config{'crontab'}) {
  die "no crontab defined!";
}

Я хочу открыть файл crontab.txt, но скрипт perl вылетает в этой строке, и я действительно не знаю никакого perl.


РЕДАКТИРОВАТЬ 1

Это выглядит так:

sub main()
{
    my %config = %{getCommandLineOptions()};
    my $programdir = File::Spec->canonpath (    (fileparse ( Win32::GetFullPathName($PROGRAM_NAME) ))[1] );
    my $logdir = File::Spec->catdir ($programdir, 'logs');
    $logfile = File::Spec->catfile ($logdir, 'cronw.log');

    configureLogger($logfile);
    $log = get_logger("cronw::cronService-pl");

    # if --exec option supplied, we are being invoked to execute a job
    if ($config{exec}) {
        execJob(decodeArgs($config{exec}), decodeArgs($config{args}));
        return;
    }

    my $cronfile = $config{'crontab'};

    $log->info('starting service');
    $log->debug('programdir: '.$programdir);
    $log->debug('logfile: '.$logfile);
    if (not defined $config{'crontab'}) {
        $log->error("no crontab defined!\n");
        die "no crontab defined!";
        # fixme: crontab detection?
    }
    $log->debug('crontab: '.$config{'crontab'});

И я пытаюсь загрузить этот файл crontab.txt ...


sub getCommandLineOptions()
{
my $clParser = new Getopt::Long::Parser config => ["gnu_getopt", "pass_through"];
my %config = ();
my @parameter = (   'crontab|cronfile=s',
    'exec=s',
    'args=s',
    'v|verbose'
                          );

$clParser->getoptions (\%config, @parameter);
if (scalar (@ARGV) != 0)  { $config{'unknownParameter'} = $true; }

return \%config;
}

Возможно, я должен дать сценарию аргумент

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

Возможно, я должен дать сценарию аргумент

Я бы сказал так.

2 голосов
/ 30 ноября 2011

Этот код проверяет, есть ли ключ 'crontab' в хеше %config.Если нет, то он вызывает die и завершается.

Если это не то, чего вы ожидаете , то где-то еще в вашем скрипте должно быть что-то, что устанавливает $config{'crontab'},но на данный момент в вашем вопросе недостаточно информации, чтобы определить, что это может быть.

1 голос
/ 30 ноября 2011

Вероятно, путь к файлу crontab.txt ожидается в хеше% config, указанном ключом 'crontab', но его там нет!Если это так, то решение DIRTY МОЖЕТ БЫТЬ:

$config{'crontab'}='FULLPATH/crontab.txt';
#if (not defined $config{'crontab'}) {
#   die "no crontab defined!";
#}

, но это может не сработать, потому что есть что-то вроде $ config {'prefix'}, и вы попытаетесь открыть это путь, представленный объединениемоба или просто потому, что в $ config {'crontab'} ожидается любое другое значение, кроме полного пути!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...