gpt4 book ai didi

linux - 在 Perl 中添加默认系统换行符

转载 作者:太空狗 更新时间:2023-10-29 11:44:15 24 4
gpt4 key购买 nike

当我将文本附加到文件时,我想为文件添加正确的行结尾:对于 Unix:"\n" 和对于 Windows "\r\n"。但是,我找不到一种简单的方法来做到这一点。这是我能想到的最好的办法:

use strict;
use warnings;
use Devel::CheckOS ();

my $fn = 'file';
open (my $fh, '<', $fn) or die "Could not open file '$fn': $!\n";
my $first_line = <$fh>;
my $len = length $first_line;
my $file_type = "undetermined";
if ($len == 1) {
$file_type = "Unix" if $first_line eq "\n";
}
if ($len >= 2) {
if (substr($first_line, $len - 1, 1) eq "\n") {
if (substr($first_line, $len - 2, 1) eq "\r") {
$file_type = "DOS";
} else {
$file_type = "Unix";
}
}
}
close $fh;
if ($file_type eq "undetermined") {
$file_type = get_system_file_type();
}
print "File type: $file_type.\n";

sub get_system_file_type {
return Devel::CheckOS::os_is('MicrosoftWindows') ? "DOS" : "Unix";
}

真的有必要做所有这些检查吗?还是有更简单的方法来做到这一点?

最佳答案

使用 :crlf 句柄,例如 use openuse if:

use if ($^O eq "MSWin32") => open qw(IO :crlf :all);

相关文件:

  • PerlIO对于 io 层。请注意,此页面声明:

If the platform is MS-DOS like and normally does CRLF to "\n" translation for text files then the default layers are :

unix crlf

所以上面的代码应该是多余的,但这正是你所要求的。

  • perlvar对于 $^O 变量。

  • open用于开放编译指示。

  • if用于有条件地加载模块。

关于linux - 在 Perl 中添加默认系统换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com