免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2822 | 回复: 4
打印 上一主题 下一主题

什么时候“\r\n”什么时候“\n” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-02 21:51 |只看该作者 |倒序浏览
标题取得不好,具体情况大家看了内容就知晓了。

我在win32里用activeperl。

我的一个修改cgi代码的脚本:add_header.pl

  1. #!C:/Perl/bin/perl
  2. use strict;
  3. use warnings;

  4. my $FILE = shift;

  5. open(FH, "+<", $FILE)               or die "Opening: $!";

  6. my @ARRAY =
  7. grep { ! /^#!/ and ! /^use strict;/ and ! /^use warnings;/ and ! /^use CGI/ }
  8. <FH>;

  9. # change ARRAY here
  10. seek(FH,0,0)                        or die "Seeking: $!";

  11. map { print FH }
  12. <DATA>;

  13. print FH @ARRAY;

  14. truncate(FH,tell(FH))               or die "Truncating: $!";
  15. close(FH)

  16. __END__
  17. #!C:/Perl/bin/perl
  18. use strict;
  19. use warnings;

  20. use CGI qw( :standard );


复制代码



某个目标cgi脚本为target.pl:

  1. #!C:/Perl/bin/perl
  2. use strict;
  3. use warnings;

  4. use CGI qw( :standard );


  5. open (LOG, ">>D:/htdocs/errors.log")
  6.     or die "Couldn't open log file: $!";

  7. carpout(LOG);
复制代码


以上两个脚本都是unix格式的。
执行perl add_header.pl target.pl后,target.pl就变成了dos格式了。

我是在vim里编辑的,修改后的target.pl里出现很多的“^M”。




我把add_header.pl作如下修改后,就没有这种意外了:

  1. #!C:/Perl/bin/perl
  2. use strict;
  3. use warnings;

  4. my $FILE = shift;

  5. open(FH, "+<", $FILE)               or die "Opening: $!";

  6. my @ARRAY =
  7. grep { ! /^#!/ and ! /^use strict;/ and ! /^use warnings;/ and ! /^use CGI/ }
  8. <FH>;

  9. # change ARRAY here
  10. seek(FH,0,0)                        or die "Seeking: $!";

  11. map { chomp; print FH $_."\n" }
  12. <DATA>;

  13. map { chomp; print FH $_."\n" }
  14. @ARRAY;

  15. truncate(FH,tell(FH))               or die "Truncating: $!";
  16. close(FH)

  17. __END__
  18. #!C:/Perl/bin/perl
  19. use strict;
  20. use warnings;

  21. use CGI qw( :standard );


复制代码


这是什么原因啊?是perl的问题,还是vim的问题?

论坛徽章:
0
2 [报告]
发表于 2006-05-02 22:03 |只看该作者

刚才说错了

修改后的add_header.pl还是会出现同样的问题


那个换行符到底是什么时候变的呢?

论坛徽章:
0
3 [报告]
发表于 2006-05-03 20:49 |只看该作者

没有哪位知道吗

是不是win32版本的perl里的print输出的都这样啊

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-05-04 16:59 |只看该作者
试着重新定义$\;
为\n...
windows/mac default的分隔符号是\r\n
unix like的是\n;
加上$\ = "\n";看看...

论坛徽章:
0
5 [报告]
发表于 2006-05-04 19:31 |只看该作者

行不通啊

原帖由 apile 于 2006-5-4 16:59 发表
试着重新定义$\;
为\n...
windows/mac default的分隔符号是\r\n
unix like的是\n;
加上$\ = "\n";看看...


以下是调整后的两个版本,原来unix式目标文档被它们处理后成了dos格式的文档。
下面的第二个脚本还会在加入的四行第行后再加个"\n"。


  1. #!C:/Perl/bin/perl
  2. use strict;
  3. use warnings;

  4. my $FILE = "taglines.txt";

  5. $\ = "\n";

  6. open(FH, "+<", $FILE)               or die "Opening: $!";

  7. my @ARRAY =
  8. grep { ! /^#!/ and ! /^use strict;/ and ! /^use warnings;/ and ! /^use CGI/ }
  9. <FH>;

  10. # change ARRAY here
  11. seek(FH,0,0)                        or die "Seeking: $!";

  12. map { chomp; print FH $_ }
  13. <DATA>;

  14. map { chomp; print FH $_ }
  15. @ARRAY;

  16. truncate(FH,tell(FH))               or die "Truncating: $!";
  17. close(FH)

  18. __END__
  19. #!C:/Perl/bin/perl
  20. use strict;
  21. use warnings;

  22. use CGI qw( :standard );

复制代码


  1. #!C:/Perl/bin/perl
  2. use strict;
  3. use warnings;

  4. my $FILE = "taglines.txt";

  5. $\ = "\n";

  6. open(FH, "+<", $FILE)               or die "Opening: $!";

  7. my @ARRAY =
  8. grep { ! /^#!/ and ! /^use strict;/ and ! /^use warnings;/ and ! /^use CGI/ }
  9. <FH>;

  10. # change ARRAY here
  11. seek(FH,0,0)                        or die "Seeking: $!";

  12. map { print FH }
  13. <DATA>;

  14. print FH @ARRAY;

  15. truncate(FH,tell(FH))               or die "Truncating: $!";
  16. close(FH)

  17. __END__
  18. #!C:/Perl/bin/perl
  19. use strict;
  20. use warnings;

  21. use CGI qw( :standard );

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP