use strict; use warnings; my $sock; # ... init socket, etc ... my $data_filename = '/path/to/data.txt'; my $data_delimiter = "\n"; my $sock_line_ending = "\r\n"; open my $data_fh, '<', $data_filename or &error( 'open->data_filename', $data_filename ); my @commands; { local $/ = $data_delimiter; @commands = <$data_fh>; chomp @commands; } close $data_fh or warn "Can't close '$data_filename': $!"; # If nothing needs to happen between commands: #print {$sock} join($sock_line_ending, @commands), # $sock_line_ending; # If something needs to happen between commands: foreach my $command (@commands) { print {$sock} $command, $sock_line_ending; # ... read the response, etc? ... }