in reply to Adding elements to an array from an array

The first thing I notice is that you match the text, but never use the results of your match. After the if statement, do something like this:
if ( m/^\.SUBCKT\s+($runset{SchCell})/ ){ my $match = $1;
Then $match will contain your matched string.

After declaring $word and assigning $_ to it, you never use its contents. $word is overwritten on each iteration of the for loop.

What is in @_, and why are you looping over it? Are you trying to get the words that matched earlier? If so, you should do something like this instead:

foreach my $word (split ' ', $match) { if ($word =~ /^V(?:DD|CC)\z/) { # push @PN, etc. } elsif ($word =~ /^(?:VSS|GND)\z/) { # push @GN, etc. } }
I hope is helpful in pointing you in the right direction.