my %subckt; my $name; my $want; while () { if (my $ff = /\.subckt\s+(\w+)/ .. /\.ends/) { $name = $1 if $ff == 1; $subckt{$name} .= $_; } else { $want = $1 if /^\s*xa1\b.*\b(\w+)\s*$/; } } print $subckt{$want};