Hi all,

I am trying to list out a bus as individual names.

For instance - When I come across a section in a file that lists a bus like this:

<busname>[0:2] 

I would like to print out this:

<busname>[0]
<busname>[1]
<busname>[2]

Here is what I have - It goes into an endless loop and I can't seem to solve it.

#! /usr/intel/bin/perl -w
my $block = $ARGV[0];
my $RTL_pin = "$block.test.v";
open (RTL, "$RTL_pin") or die "could not open file $RTL_pin\n";
system ("touch newtest2");
open( NEWFILE2, "> newtest2" ) or die "Can't open file: newtest2 $!";

system (" grep -E '[input]|[ouput]|[inout]' $RTL_pin > $RTL_pin.hold");
system (" cp -p $RTL_pin.hold $RTL_pin");

while (<RTL>)
{
   chomp;
   s/;/ /g;
        if ($_ =~ /(.*\s+)\[(\d+):(\d+)\]/)
        {
       $bn = $1; #busname
        $h = $2;  #high number
        $l = $3;    #low number
        $i = 0;     
# print NEWFILE2 "\n$l\n$h\n$bn\n";
           for ($i = $l; $h;  $i++)
                {
             print "$bn[$i]";
                }
        }
}

Thanks for any help.

Please put your code in CODE tags in the future, on any forum.

for ($i = $l; $h;  $i++)

This loop will terminate when the middle expression evaluates to a false value. You seem to want $i <= $h, not $h. ($h will just return something like 2 or 3 (whatever its value is), every time, and those are true values, causing the loop to run infinitely.)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.