#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 /,/;
...
Что-то в этом роде. Любой модуль, который не возвращает строку, вызывает разочарование, когда вам нужно соответствовать спецификации. Впрочем, удачи.