在Perl中写入文件的问题

在Perl中写入文件的问题,perl,file-io,newline,solaris,Perl,File Io,Newline,Solaris,我正在solaris上运行此脚本。我试图将真实时间、用户时间和系统时间写入一个文件,每个文件都在单独的一行中。但是,这段代码使用一堆未知字符框将它们一起写在同一行上。我如何在各自的线路上获得每个时间 #!/usr/local/bin/perl -w use strict; use warnings; my $command = "time echo 'hi' 2>&1 | tee -a runtimes.log"; system ($command); Solaris标准行分

我正在solaris上运行此脚本。我试图将真实时间、用户时间和系统时间写入一个文件,每个文件都在单独的一行中。但是,这段代码使用一堆未知字符框将它们一起写在同一行上。我如何在各自的线路上获得每个时间

#!/usr/local/bin/perl -w

use strict;
use warnings;

my $command = "time echo 'hi' 2>&1 | tee -a runtimes.log";
system ($command);

Solaris标准行分隔符为\n,因此您的代码似乎是正确的。再看看

您的问题可能与用于查看文件的文本编辑器有关…

有两件事:

检查open和system命令的输出。 在关闭文件之前,再打印一个空行。 试试这个:

#!/usr/bin/env perl

use strict;
use warnings;   #No need for -w when using this

my $command = "time ls 2>&1 | tee -a runtimes.log";
open (FILE, '>>runtimes.log') 
    or die qq(Can't open "runtimes.log for writing\n);

my $error = system ($command);
if ($error) {
    die qq(Error in executing command "$command": $?\n);
}
print "\n";
close FILE;
exit 0;

如果您使用perl代码times或POSIX::times来获取系统/用户时间,您可能会得到更好的结果以及更易于维护的代码

$command="ls -lR";
@before{real,user,system,chuser,chsystem}=(time(),times());
system $command;
@after{real,user,system,chuser,chsystem}=(time(),times());
print "real @{[ $after{real}-$before{real} ]}\n";
print "user @{[ $after{chuser}-$before{chuser} ]}\n";
print "sys  @{[ $after{chsystem}-$before{chsystem} ]}\n";
或POSIX版本:

use POSIX qw(times sysconf);
$clocks_per_second=POSIX::sysconf( &POSIX::_SC_CLK_TCK );
$command="ls -lR";
@before{real,user,system,chuser,chsystem}=(POSIX::times());
system $command;
@after{real,user,system,chuser,chsystem}=(POSIX::times());
printf "real  %2.2f\n", ($after{real}-$before{real})/$clocks_per_second;
printf "user  %2.2f\n", ($after{chuser}-$before{chuser})/$clocks_per_second;
printf "sys   %2.2f\n", ($after{chsystem}-$before{chsystem})/$clocks_per_second;

事实上,它起到了一定的作用,我正在编辑我的问题re:edit:你希望open做些什么吗?因为它不是。另外,在脚本结束时,您不需要关闭也不需要退出,因为这些事情在脚本结束时会自动完成。这对你还是不起作用吗?如果是的话,那么到底是什么不起作用。另外,正如@TLP所提到的,您不需要在脚本中使用该出口。我无法将时间打印到单独的行中。@Stephen您怎么知道它们不在单独的行中?是否在某些浏览器中查看该文件?哪个浏览器?我很喜欢这个解决方案的外观。但是我不能让它在我的机器上运行。我添加了“使用POSIX;”在顶端,没有运气。当您的代码功能齐全时,它会是什么样子?谢谢。时间和时间是内置函数,所以它应该按原样工作。posix版本返回的值与时钟滴答声略有不同,而不是秒数,因此需要进行转换,但作为交换,您可以获得更高的实时数字分辨率。对于POSIX版本,添加use POSIX qwtimes sysconf;并将time,times更改为POSIX::times。要转换为秒,请将差值除以$POSIX::sysconf&POSIX::\u SC\u CLK\u TCK;每秒时钟滴答声的sysconf值是的,posix更精确。我对此问题所做的唯一更改是将\n替换为\r\n。但这绝对是最有帮助的答案。非常感谢