在Perl中写入文件的问题

时间:2011-07-18 17:23:26

标签: 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);

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

两件事:

  • 检查opensystem命令的输出。
  • 在关闭文件之前打印一个额外的空行。

试试这个:

#!/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;

答案 2 :(得分:0)

如果使用perl代码(timesPOSIX::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;