On Feb 3, Steven M. Klass said: ># First we use the tool ./fh to go create the file hierachy file. This will ># return something that looks like the following:
># possibly the top cell ># topcell : 1 ># subcell0 : 2 ># subcell1 : 2 ># subsubcell0 :3 ># subcell0 : 2 ># subcell2 : 2 ># subcell0 : 3 ># subcell1 : 3 ># subsubcell0 : 4 ># Now all I want to do is parse this file for individually created cells. ># 1. So, I need to remove the first line - it's always garbage. ># 2. I also need to remove any cells that contain "$" as they too aregarbage. ># 3. I also want to strip the ":" and anything that follows ># 4. Lastly, I don't want duplicates so I need to check them to make sure ># the names (subcells) don't already exist. >while (<CELL>) { > my $line = $_; > chop($line); > for ($line) { > # Remove the first line -->>CHEESY<<-- (Solves #1) > s/possibly.*/\ /; > # Remove all Cadence PCells (Solves #2) > s/\b.*\$.*//; > # Remove every level of hier (Solves #3) > s/\ :.*\n//; > print LIST "$list"; > } >} I don't see why you're reading a line into $_, copying it to $file, and then looping over $file to get $_ again. And where'd $list come from?! my (@cells, %seen); while (<CELL>) { next if $. == 1 or /\$/; # skip first line and lines with $ s/\s+:.*//s; # remove everything after the colon push @cells, $_ if !$seen{$_}++; } If you don't understand that last line, let me expand it for you: if (!$seen{$_}++) { push @cells, $_; } This uses the magic of post-increment. The first time a cell-name is seen, $seen{"..."} will be 0. $seen{$_}++ returns the value of $seen{$_} and then increments the original -- so we get 0 back, but afterwards, the value is 1. Here's a quick demo: $a = 10; $b = $a++; print "$b $a"; # 10 11 # compare with $a = 10; $b = ++$a; print "$b $a"; # 11 11 The ! in front of $seen{$_}++ takes the logical opposite of the value returned. If $seen{$_} returns 0, that means we've never seen the value before, so !$seen{$_} returns 1, so the if statement is executed, and the cell name is push()ed to the @cells array. AS A SIDE EFFECT, $seen{$_} is incremented one. If $seen{$_} returns a non-zero value, that means we've seen it before, so it's a duplicate, so we don't need to keep it. AS A SIDE EFFECT, $seen{$_} is incremented one. -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ ** Look for "Regular Expressions in Perl" published by Manning, in 2002 ** <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]