Форматирование выходных данных с помощью perl?

#perl

#perl

Вопрос:

Привет, ребята, здесь абсолютный новичок в perl. Я использую сервер tf2, и у меня есть простой perl-скрипт, который, как я нашел, восстанавливает его статистику. Мне нужно отредактировать его форматирование, чтобы cacti мог читать его красиво и правильно. Сценарий такой:

 use Rcon::HL2;

my $rcon = Rcon::HL2->new(
    hostname => "myserverhere",
    password => "omgawesomepassword",
);
  

Когда я запускаю его, он возвращает:

 0CPU   In    Out   Uptime  Users   FPS    Players
0.00  0.00  0.00     514     9  956.02       0
  

Изначально я хотел бы, чтобы он просто выводил числа — 0.00 0.00 0.00 514 9 956.02 0 , возможно, разделенные табуляцией или запятой.

Кто-нибудь может мне помочь с этим? Я искал вокруг и возился с cut и sed и тому подобным, но, похоже, не могу найти правильный способ для меня это сделать. В идеале я хотел бы иметь возможность запускать myscript.perl -cpu или myscript.pl -в, и так далее, чтобы вернуть только эти биты, но я думаю, если кто-нибудь сможет показать мне, как управлять выводом, я смогу разобраться с остальным.

Спасибо!

Ответ №1:

Вы можете использовать оператор подстановки (s///), чтобы заменить все пробелы запятыми, например:

 use warnings;
use strict;

my $out = '0.00  0.00  0.00     514     9  956.02       0';
$out =~ s/s /,/g;
print "$outn";

__END__

0.00,0.00,0.00,514,9,956.02,0
  

Ответ №2:

Похоже, вы пытаетесь изменить формат вывода модулей. Лучший способ сделать это — вызвать его из другого скрипта, чтобы вы могли получить его в качестве входных данных, а затем изменить по своему усмотрению. В Perl есть буферизация вывода, но, вероятно, это следует называть кэшированием вывода, потому что на самом деле это не позволяет вам изменять поток после его создания.

Пример. — Внутри rconhl2.pl

 use Rcon::HL2;

my $rcon = Rcon::HL2->new(
    hostname => $ARGV[0],
    password => $ARGV[1],
);

...
  

Пример. — Внутри myscript.pl

 ...
$var = `perl rconhl2.pl $param1 $param2`;
$var =~ s/s /,/;
...
  

Что-то в этом роде. Любой модуль, который не возвращает строку, вызывает разочарование, когда вам нужно соответствовать спецификации. Впрочем, удачи.