Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 为什么我在用Perl下载的网页中会有额外的换行符?_Windows_Perl_Newline_Line Breaks_Carriage Return - Fatal编程技术网

Windows 为什么我在用Perl下载的网页中会有额外的换行符?

Windows 为什么我在用Perl下载的网页中会有额外的换行符?,windows,perl,newline,line-breaks,carriage-return,Windows,Perl,Newline,Line Breaks,Carriage Return,我正在编写一个简单的Perl脚本(在Windows上),用于将get请求的响应下载到文件的url。非常直截了当。除非它写入输出文件,否则我会得到额外的换行符。因此,与其说: <head> <title>title</title> <link .../> </head> 我想我可以得到,但现在这让我很困扰。我怎么才能摆脱那些额外的断线 chomp($content)是我的猜测。看起来里面已经有一组\n的 编辑: 抱歉,我刚刚意识

我正在编写一个简单的Perl脚本(在Windows上),用于将get请求的响应下载到文件的url。非常直截了当。除非它写入输出文件,否则我会得到额外的换行符。因此,与其说:

<head>
  <title>title</title>
  <link .../>
</head>
我想我可以得到,但现在这让我很困扰。我怎么才能摆脱那些额外的断线

chomp($content)是我的猜测。看起来里面已经有一组\n的

编辑: 抱歉,我刚刚意识到chomp不起作用,除非您将文件分成几行,然后再chomp每行,因为chomp只会chomp输入字符串的结尾,我的解决方案在这种情况下没有帮助,但是,您可以在\n\n上拆分它,然后加入? 我确实喜欢在下面的答案中返回的字符串上使用正则表达式的解决方案。但是,对我来说,对的小修改包括一些附加更改,因此它仍然分隔行,但它将检查2+\n或2+\r或两者的任意组合。然后在它的位置返回一个\n,这样每行只会有一个新行(希望如此)

$content=~s/[\n\r]+/\n/g


再次编辑上面,不小心放了一个!因为某种原因…不确定为什么我猜
$content
已经包含了CRLF换行符,Perl的IO层正在进行LF->CRLF转换。(在内部,“\n”是Perl中的单个字符,通常为LF)。我想补充一点

之后,打开
以禁用该转换,并直接写入
$content
的结果

  • 示例代码中的
    >+
    模式没有合理的理由。只是说说而已
  • LWP::Simple
    有一个
    getstore
    方法。如果您使用的是
    LWP::Simple
    ,为什么不使用它呢
  • 默认情况下,open在win32上运行时将推送
    :crlf
    I/O层,这将
    \n
    转换为
    \r\n
    。但是您正在编写的数据已经有了
    \r\n
    ,因此换行太多。如果希望逐字写入数据,应使用
    binmode
    ,或首先使用
    :raw
    打开句柄。LWP已经正确地做到了这一点

  • 为什么
    “+>”
    ,为什么不
    LWP::Simple::getstore
    <head>
    
      <title>title</title>
    
      <link .../>
    
    </head>
    
    use LWP::Simple;
    
    my $url = $ARGV[0];
    my $content = get($url);
    
    open(outputFile, '+>', $ARGV[1]);
    
    print outputFile $content;
    
    close(outputFile);
    
    binmode(outputFile);