gpt4 book ai didi

linux LF 在我的 perl 脚本中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 05:04:15 29 4
gpt4 key购买 nike

即使我使用 binmode 写入文件,我仍然看到 Windows 风格的 LF。

# open the files
open (inFile, "<$inFileName") or die "can't open $inFileName: $!\n";
binmode inFile;
open (outFile, ">$outFileName");
binmode outFile;

# get the input file size
$fileSize = -s $inFileName;

# read in the file
sysread(inFile, $fileStr, $fileSize);

# calc the checksum
$strChecksum = unpack("%32C*", $fileStr);

$headerStr = pack(V4,$fileID, $fileFlags, $fileSize, $strChecksum);

print outFile "$headerStr$fileStr";

close inFile;
close outFile;

我希望在我的二进制文件中看到 Linux 风格的 LF,我看到 0x0d 0x0a 而不是 0x0a。我正在使用 activestate perl 5.16.3

任何人都可以帮我找出为什么这个 binmode 不起作用吗?

最佳答案

您仍然拥有 Windows 行结尾,因为您从未更改行结尾。

输入句柄上的

binmode 会导致文件内容原封不动地返回。

输出句柄上的

binmode 会导致标量的内容不变地写入。

如果您的输出文件包含 CR LF,那是因为您的输入文件包含 CR LF。

你失踪了

$fileStr =~ s/\r//g;

或者,只需在输入句柄上保留 binmode 即可。

<小时/>

顺便说一句,sysread 不能保证读取您请求的字节数,因此您对它的使用已被破坏。使用

1 while sysread(inFile, $fileStr, 64*1024, length($fileStr));

{ local $/; $fileStr = <inFile>; }
<小时/>

顺便说一下,

pack(V4, ...)

应该是

pack('V4', ...)

始终使用use strict;使用警告;!

关于linux LF 在我的 perl 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21717722/

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