代码之家  ›  专栏  ›  技术社区  ›  Simply Seth

perl:如何从一个文件中读取所有行并作为一行文本打印

  •  1
  • Simply Seth  · 技术社区  · 14 年前

    我正在尝试返回一个文件的输出,该文件将换行符替换为\n而不使用CPAN

    这是我到目前为止的情况

    #! /usr/local/bin/perl 
    
    if ( $#ARGV = "1" )     {
        print "$ARGV[0]\n";
    
        my $file = "$ARGV[0]";
        my $document = do {
            local $/;
            open my $fh, "<", $file
              or die "could not open $file: $!";
            <$fh>;
        };
        print "Doc: $document\n";
    }
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   OMG_peanuts    14 年前

    您可以使用slurp模式(不再需要while循环)和一些regexp:

    print map { $_ =~ s/\n/\\n/; $_ } (<>); 
    

    my @a = <>;
    $\ = $, = '\n';
    chomp @a;
    print @a;
    

    ($\是输出记录分隔符,$是输出字段分隔符。两者都适用于打印操作员)

        2
  •  3
  •   Anon.    14 年前
    while(<>) {chomp;print;print '\n';}
    
        3
  •  0
  •   Simply Seth    14 年前

    我试过这个。。。

    #! /usr/bin/perl 
    
    if ( $#ARGV = "1" )     {
    open FILE, "<", "$ARGV[0]" or die $!;
    chomp $_;
    @chars = map ({ $_ =~ s/\n/\\n/; $_ } (<FILE>)); 
    print @chars;
    print "@chars\n";
    }
    

        4
  •  0
  •   gjc    14 年前

    为了清楚起见,这是一个很长的解决方案。简而言之,chomp将删除所有尾随空格和控制字符。

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my $filename = shift;
    my @contents;
    my $lines = 0;
    
    if (! -e $filename) {
        print "Please provide a valid filename\n";
        exit;
    }
    
    print "Examining $filename\n";
    
    open(FILE, "<$filename");
    
    while (<FILE>) {
        chomp();
        push(@contents, $_);
        print ".";  
        $lines++;
        if ($lines % 10 == 0) {
            print "\n";
        }
    }
    close(FILE);
    
    print "done\n";
    
    foreach (@contents) {
        print "$_";
    }
    
    print "\n";