【发布时间】:2013-07-09 21:34:10
【问题描述】:
此 Perl 脚本在 Win7 上运行,修改了将在 Linux 机器上读取的 Clearcase 配置规范。 Clearcase 对其行结尾非常挑剔,它们必须精确且只有 \n (0x0A) 但是尽我所能尝试我不能让 Perl 只吐出 \n 结尾,它们通常会出现 \r\n (0x0D 0x0A)
这是 Perl sn-p,它运行在一组配置规范元素上,并将 element /somevob/... 位转换为 element /vobs/somevob/... 并打印到文件句柄。
$fh = new FileHandle;
foreach my $line (@cs_array)
{
$line =~ s/([element|load])(\s+\/)(.+)/$1$2vobs\/$3/g;
$line =~ s/[\r\n]/\n/g; # tried many things here
$fh->print($line);
}
$fh->close();
有时数组中的元素是多行的,由\n分隔
element /vob1/path\nelement\n/vob2/path\nload /vob1/path\n element\n
/vob3/path
load /vob3/path
当我在二进制查看器中查看在 Win7 上编写的文件时,总是会出现 Linux 上的 Clearcase 抱怨的 0x0D 0x0A 换行序列。这似乎来自印刷品。
有什么建议吗?我以为这将是一个 10 分钟的工作......
【问题讨论】:
-
您是否尝试过明确指定
\x0A而不是\n? IIRC,\n是逻辑行尾。 -
@amon 据我所知,在 Perl 中并非如此。
\r是\x0d,\n是\x0a,只是在边界处\r\n和\n之间转换的IO 层。如果有人能证明我错了,我想看看。 -
@hobbs 有道理(我已经有一段时间没有为 Windows 写东西了)。