Предотвратить остановку Perl eval, когда она встретит пустую строку в переданном вводе? - PullRequest
0 голосов
/ 13 марта 2012

По причине, по которой я не собираюсь вдаваться, у меня есть Perl-скрипт, который читает текстовый файл, а затем выполняет его для создания конфигурации.

Когда есть пустая строка втекстовый файл удаляется, после пустой строки ничего не происходит, поэтому я предполагаю, что Perl рассматривает пустую строку как своего рода указание на то, что он должен прекратить вычисление или что-то в этом роде.

Есть ли способостановить это поведение?

Код:

open my $CONFIGFILE, '<', $config_file || return 0;
my $config_code = do{local $/ = q{}; <$CONFIGFILE>};
close $CONFIGFILE;
my $config;
unless(eval $config_code){
  return 0;
}

1 Ответ

1 голос
/ 13 марта 2012

Я подозреваю, что вы читаете каждую строку, манипулируете ею и затем строите огромную строку для eval (которая затем ломается).

У вас есть несколько вариантов:

1)читать в файле конфигурации, пропуская все пустые строки, как вы читаете.IE, что-то вроде:

while(<>) {
   next if (/^\s*$/);
   # do $string collection here
}
eval($string);

2) захватывать результаты eval по одному:

while(<>) {
    $string = super_secret_read_and_modify($_);
    eval($string);
}

С # 1 и # 2 вы можете отбрасывать вещи, которые нарушают ваш код.Я подозреваю, что у вас возникли проблемы, потому что оцениваемые вами данные недействительны.Так что вам нужно либо исправить свою конструкцию, либо разбить ушки на более мелкие кусочки, чтобы оценка одного куска не помешала остальным работать.

...