Проблемы записи в файл в Perl - PullRequest
1 голос
/ 18 июля 2011

Я запускаю этот скрипт на солярисе.Я пытаюсь записать реальное, пользовательское и системное время в файл, каждый в отдельной строке.Однако этот код вместо этого записывает их вместе в одной строке с кучей неизвестных символьных блоков.Как я могу получить каждый раз на отдельной отдельной строке?

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

use strict;
use warnings;

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

Ответы [ 3 ]

0 голосов
/ 19 июля 2011

Две вещи:

  • Проверьте вывод обеих ваших команд 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;
0 голосов
/ 19 июля 2011

Вы, вероятно, получите лучшие результаты, а также более обслуживаемый код, если будете использовать код 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;
0 голосов
/ 18 июля 2011

Стандартный разделитель строк Solaris равен \n, поэтому ваш код выглядит правильным. Смотрите также здесь .

Возможно, ваша проблема связана с текстовым редактором, который вы используете для просмотра файла ...

...