At 15:15 +0000 22/12/05, James Harvard wrote: > > I'm trying to detect a file's line endings (\r\n for DOS, \r for Mac and \n > for Unix as I'm sure y'all know). > > Is there any easy way to do this? > > use Fcntl; > > sub get_line_ending_for_file { > my( $file ) = @_; > > my $fh; > sysopen( $fh, $file, O_RDONLY ); > sysread( $fh, $_, 33000 ); > close( $fh ); > > return /(\015\012|\015|\012)/ ? $1 : "\n"; > } >
Does this work on all platforms? When I try it it works fine on OSX/Linux with MAC/DOS/UNIX line endings, but fails (reads the whole file) when reading DOS line endings on WinXP... Here is my script use Fcntl; my $file = $ARGV[0]; open(INFILE, $file) || die "cannot open $file: $!\n"; { local $/ = get_line_ending_for_file($file); while(<INFILE>) { my $line = $_; chomp $line; print "\n\n".length($line)."\n\n"; last; } } sub get_line_ending_for_file { my($file) = @_; my $fh; sysopen( $fh, $file, O_RDONLY ); sysread( $fh, $_, 200 ); close( $fh ); return /(\015\012|\015|\012)/ ? $1 : "\n"; } Thanks for any help Adam -- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.