du solltest mit "chomp ( $szZeile ) " jeder eingelesenen Zeile das Zeilenendezeichen (CR / CRLF abh. vom System) entfernen.
use strict;
my $szDatei_1 = shift ( @ARGV ) || '';
my $szDatei_2 = shift ( @ARGV ) || '';
my $szZeile_1;
my $szZeile_2;
# pruefe, ob Dateien vorhanden und lesbar:
#---------------------------------------
unless ( $szDatei_1 && -w $szDatei_1 ) {
print "Datei_1 [$szDatei_1] nicht angegeben oder keine Schreibrechte [$!]\n";
exit 1;
} # end pruefe Datei_1
# ...kannst Du auch fuer Datei_2 machen
open INFILE_1, "<$szDatei_1" || die "$!";
open INFILE_2, "<$szDatei_2" || die "$!";
# schreibe zuerst in ein tempfile, das spaeter umbenannt wird
open OUTFILE, ">$szDatei_1".'.tmp' || die "$!";
while ( $szZeile_1 = <INFILE_1> ) {
chomp ( $szZeile_1 );
$szZeile_2=<INFILE_2> || '';
chomp ( $szZeile_2 );
print OUTFILE "$szZeile_1\t$szZeile_2\n";
} # end while alle Zeilen Datei_1
close (INFILE_1);
close (INFILE_2);
close (OUTFILE);
# jetzt noch outfile umbenennen:
#-------------------------------
unless ( rename ( "$szDatei_1".'.tmp', $szDatei_1 ) ) {
print "Fehler beim Umebennen [$!]\n";
exit 1;
} # end umbenennen
exit 0;