#!/usr/bin/perl use strict; use warnings; my $filename_pdb = 'myhalf1.pdb'; my $filename_in = "topol1.top"; my $filename_out = "$filename_in.new"; open my $fh_pdb, '<', $filename_pdb or die "opening '$filename_pdb': $!"; my $sol1 = grep /HW1/,<$fh_pdb>; close $fh_pdb; print "\$sol1 = $sol1\n"; open my $fh_in, '<', $filename_in or die "opening '$filename_in': $!"; open my $fh_out, '>', $filename_out or die "opening '$filename_out': $!"; print "processing '$filename_in' \n"; my $count = 0; while (<$fh_in>) { if ( s/SOL .*/SOL $sol1/g ){ # change as required ++$count; } print $fh_out $_; } close $fh_in; close $fh_out; print "$count lines changed\n";