Tao Wang wrote: > Hi Everyone, > I'm trying to parse lines of macros definitions as > following: > > AV $(G)/er $(M)/q $(T)/w/f > G ter/eee > M $(W) > T g/ee/fet > W $(AV) >
here is another way of doing it: #!/usr/bin/perl -w use strict; my $code =<<'CODE'; AV $(G)/er $(M)/q $(T)/w/f G ter/eee M $(W) T g/ee/fet W $(AV) P 1/2 K $(P) C $(M) CODE my %macro; my %buf; my $s; for(split(/\n/,$code)){ my($m,$c) = split(/\s+/,$_,2); push(@{$macro{$m}},$1) while($c =~ /\$\((\w+)\)/g); } print "circular:\n"; while(my($m,$c) = each %macro){ $s = $m; %buf = (); cir(\%macro,$m); } sub cir{ my $macro = shift; my $target = shift; for(@{$macro->{$target}}){ if(exists $buf{$_} && $buf{$_} > 1){ print "\t$s\n"; return; }else{ $buf{$_}++; cir($macro,$_); } } } __END__ prints: circular: W M C AV it reports C as circular becasue M is circular. david -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]