http://www.perlmonks.org?node_id=625758


in reply to Someone please verify this.

Your C-style for loop runs from zero to minus one, because $#efile refers to the last index of the array @efile, which is created on the spot - empty. Your task will be much simpler if it is written using the idiomatic $_ variable.

#!/usr/bin/perl use warnings; use strict; my $input_file = 'dump.vcd'; open (INPUT, '<', $input_file) or die $!; while (<INPUT>) { s/\$var\w \d+ ([!,\#,\",\$,\%,&]) (\w) \$end/\$var $1 $2/; print; } close INPUT;
That has the benefit that the file is read and processed one line at a time, with no space taken for an array to hold it. I added warnings and strict, which would have told you what was wrong. I also improved open to the 3-arg form and added error checking in case open fails.

I don't believe your character class is exactly what you think it is because of all the commas and escapes. I didn't modify the s/// statement because I didn't know its intent.

After Compline,
Zaxo