В Perl мне нужно прочитать файл .conf, который содержит условие типа $ a> $ b на основе результата условия, которое я должен выполнить, если блок if или else - PullRequest
0 голосов
/ 20 июля 2009

Содержание condition.conf:

condition1=$a>$b

Пример кода Perl:

$cnd_ConfFile = $ARGV[0];
open(CONDITIONS, '<', $cndConfFile);

$cndCount=0;
while ( <CONDITIONS> ) {
        chomp; # no newline
        s/#.*//; # no comments
        s/^\s+//; # no leading white
        s/\s+$//; # no trailing white
        next unless length;
        ($var, $value) = split(/\s*=\s*/, $_, 2);
        $cndOnCounterValues[$cndCount++]=$value;
}

close CONDITIONS;

$cond = $cndOnCounterValues[0];
print "\n$cond\n";

$a=3;
$b=5;

if($cond){
  print "a is greater then b";
}
else
{
  print "b is greater then a";
}

Приведенный выше код всегда выдает «a is greater then b».

Независимо от значений $a и $b.

Ответы [ 2 ]

1 голос
/ 20 июля 2009

Вот краткий пример, который, кажется, удовлетворит вашу проблему.

#! /usr/bin/env perl
use strict;
use warnings;

my @cond;
{
  while( <> ){
    chomp;
    next unless length;
    next if m' ^ \s* \# 'x;

    next unless m' (\w+) \s* = \s* (.*?) \s* $'x;
    push @cond, [$1,$2];
  }
}
my($a,$b);

$a=3;
$b=5;

for my $elem ( @cond ){
  my($name,$cond) = @$elem;

  if( eval $cond ){
    print "$name is true, because $cond matches "
  }else{
    print "$name is false, because $cond doesn't match "
  }
  print '(', eval("qq{$cond}"), ")\n";
}

echo 'condition1=$a>$b
condition2=$a<$b' | perl test.pl
condition1 is false, because $a>$b doesn't match (3>5)
condition2 is true, because $a<$b matches (3<5)
1 голос
/ 20 июля 2009

Я предполагаю, что вы хотите оценить выражение $ a> $ b, которое буквально появляется в вашем файле конфигурации. Для этого замените:

if ($cond) {

с:

if (eval $cond) {

Это должно быть уловкой.

Отказ от ответственности: не делайте этого, если вы не знаете, что делаете (см. Комментарии).

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