if (CONDITION_1) {
if (CONDITION_A) {
a = 1;
}
}
elsif (CONDITION_2) {
if (CONDITION_B) {
if (CONDITION_i) {
a = 2;
}
elsif (CONDITION_ii) {
a = 3;
}
endif
}
endif
}
endif
내가 문자열로 출력 조건을 추출하고, 같은 자신의 수준에 따라 그들을 밖으로 인쇄 할 : 나는 펄에서 재귀를 코딩하는 방법추출 IF-ELSIF 자신의 수준에 따라 조건
CONDITION_1
CONDITION_1//CONDITION_A
CONDITION_2
CONDITION_2//CONDITION_B
CONDITION_2//CONDITION_B//CONDITION_i
CONDITION_2//CONDITION_B//CONDITION_ii
실제 파일에는 3 단계 이상의 if-else 블록이있을 수 있습니다. 나는 논리를 올바로 맞출 수 없다. 많은 감사합니다.
my (%cond, $lvl);
open my $fh, '<', $file or die;
while (<$fh>) {
if (/if\s\((\w+)\)/) {
$lvl++;
push @{ $cond{$lvl} }, $1;
for my $i (1 .. $lvl) {
print "${ $cond{$i} }[-1]";
print "//" if $i != $lvl;
}
print "\n";
}
elsif (/elsif\s\((\w+)\)/) {
push @{ $cond{$lvl} }, $1;
for my $i (1 .. $lvl) {
print "${ $cond{$i} }[-1]";
print "//" if $i != $lvl;
}
print "\n";
}
elsif (/else/) {
push @{ $cond{$lvl} }, 'else';
for my $i (1 .. $lvl) {
print "${ $cond{$i} }[-1]";
print "//" if $i != $lvl;
}
print "\n";
}
elsif (/endif/) {
$lvl--;
}
}
close $fh;
"무언가"무엇입니까? 이 작업을 안정적으로 수행하려면 원하는 작업뿐만 아니라 모든 작업을 분석 할 수 있어야합니다. – ysth
그들은'define CONSTANT 3'과 같은 정의의 선언입니다. 그러나 if 블록의 내용은 조건을 추출하기 만하면되므로 중요하지 않습니다. 미안합니다. –
은 들여 쓰기가 항상 절대적으로 일치합니까? 탭이 아닌 항상 공백을 넣으시겠습니까? – ysth