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

sar123 has asked for the wisdom of the Perl Monks concerning the following question:

I have the following code:
#!/usr/bin/perl -w use warnings; use diagnostics; open $fh , "<", "$ARGV[0]" or die "Could not open file: $!"; sub getsub{ my $sub = $_[0]; print "sub entered for $sub\n"; while (<$fh>) { if (/\.subckt $sub/../\.ends/) { print ; } } } while (<$fh>) { if ($_ =~ /^xa1/) { $line = $_; print "line found to be $line\n"; while ((my $nxt = readline($fh)) =~ /^\+/) { $line = $nxt; print "line changed to $line\n"; } $line =~ s/\s+$//; print "last line is $line\n"; my $sub = (split '\s', $line)[-1]; print "subcircuit found is $sub in $line\n"; getsub($sub); } }
Here I am trying to print some text between two patterns inside the `getsub` routine. But when I try to run this I enter the subroutine but doesn't enter the if block inside the subroutine. I am trying to run it on the following file:
.subckt a1 x y z xa a b c1 xb c d e1 xc f g h1 .ends .subckt c1 x y z xa a b f xb c d e xc f g h .ends .subckt e1 x y z xa a b c1 xb c d k1 xc f g h1 .ends xa1 a s f a1
I want to print the contents of the file between ".subckt a1" till ".ends".
I know this could be done by the one liners of perl on the command line, but I want to create some generalized script for different files so I need to go this way only. What is wrong with the above code.