Suresh Govindachar wrote:
> Hello,
> 
>   The following dos2unix one-liners  
> 
>       perl -i~ -pe "s/\r\n$/\n/" <files>
> 
>   fails in windows.  I think it is because when
>   perl writes the resulting file, it re-inserts \r\n!
> 
>   The following code almost works:
> 
>       $^I = '~';
>       my $file_name = $ARGV[0]; 
>       my @lines = ();
>       while(<>)
>       {
>         chomp;                     
>         push @lines, $_;
>       }
>       open (OUT, ">", $file_name) or die "Unable to open $file_name for 
> reading:$!\n"; 
>       binmode OUT; 
>       print OUT join "\n", @lines;  
 >
>    The above code "almost works" because it removes the very last
>    line if the very last line was \r\n.  This problem can be solved
>    by replacing chomp with s/\r\n$/\n/ and joining @lines with ''.
 >
>    The issue I have seen with many of the solutions for dos2unix
>    (including the gnu win32 version) is that they blindly replace
>    all \r with nothing thereny removing any ^M embedded within lines
>    (and I have vim-related files with ^M embedded inside lines).
> 
>    Anyway, how to fix the one-liner and how to make the multi-liner
>    terser?

Try:

$^I = '~'; no warnings 'once';
while (<>) { binmode ARGVOUT if $. == 1; print; }

_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to