2012-01-11 7 views
-6

У меня проблема в if-блоке. Я сравниваю две переменные, если они равны, тогда некоторые операторы должны выполняться, иначе должен выполняться другой оператор. Мне нужно вернуть новую инструкцию, если мой ложный блок выполняется второй раз.Обнаружение, когда второй блок выполняется во второй раз

Например:

if($type eq $kind){ 
    $line1 .= "</p></list-item>\n<list-item><p>"; 
} 
else{ 
    $line1 .= "\n<list list-type=\"$kind\">\n<list-item><p>"; 
} 

Здесь type=bullet и kind=number, теперь второй раз в остальное части (опять kind=number) выполняется, я хочу, чтобы показать тот же оператор, назначенный $ линии, я хочу показать как <list-item></p>

Где я могу проверить состояние еще раз?

ответ

2

Вам нужно сохранить какое-то состояние и использовать его, чтобы определить, как распечатать второе (или третье или ...) время.

my $has_printed_once = 0; 

# your loop { 

    if ($type eq $kind) { 
    # no change 
    } else { 
    if ($has_printed_once == 0) { 
     # print the second thing 
    } else { 
     $has_printed_once = 1; 
     # print the first thing 
    } 
    } 

# } close loop 
1

Вне цикла вы можете определить переменную состояния.

my $state = 1; 

Внутри цикла проверьте и задайте переменную состояния.

if($type eq $kind) 
{ 
    $line1 .= "</p></list-item>\n<list-item><p>"; 
} 
else 
{ 
    if($state eq 1) 
    { 
     $line1 .= "\n<list list-type=\"$kind\">\n<list-item><p>"; 
     $state++ ; 
    } 
    else 
    { 
     $line1 .= "(whatever you want to write the second time)"; 
    } 
} 

Обратите внимание, что это фрагмент кода. Я не запускал его через интерпретатор perl, чтобы проверять наличие ошибок. Надеюсь, это даст вам эту идею.

Смежные вопросы