954,523 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Trouble Expanding a bus in PERL

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:

[0:2]

I would like to print out this:

[0]
[1]
[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 ()
{
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.

mforeman
Newbie Poster
11 posts since Sep 2005
Reputation Points: 10
Solved Threads: 0
 

Please put your code in [CODE] and [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.)

Rashakil Fol
Super Senior Demiposter
Team Colleague
2,658 posts since Jun 2005
Reputation Points: 1,135
Solved Threads: 177
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You