这是代码。我说实话,我对Perl并不熟悉,而且我已经从这个网站复制过来,或多或少地构建你在下面看到的东西。这里的另一篇文章Run a sub in a perl script based on the time?显示了while函数(?)的基础知识,但它在我的第一个变量之后出错。尝试双引号,单打引号,不知道还有什么可尝试。有关为什么这么快失败的任何想法? 其余的代码没有它,但我需要每30分钟运行一次这个脚本。我们可以使用Windows来运行它(我有一个已经运行的PowerShell脚本),但我们有可能在Unix / Linux上运行它,我们可能只是使用Perl来进行跨平台使用。
此外,我目前正在Windows中进行测试,以方便使用。我更多的是Windows用户,但我确实有一些可以在Linux上运行的代码,这对我来说更容易进行测试。
提前致谢!
错误
语法错误在D:\ mount \ script.pl第13行,靠近" 15;"
语法错误在D:\ mount \ script.pl第36行,靠近")"
while (1)
{
dostuff
(
my $timeout = 15;
my $cellname = "PRD-BPPM";
#Variable for time in epoch because Windows is stupid and can't post it like EVERY OTHER OS out there
my $endtimew = "1416788994";
my $starttimew = $endtimew - 1800;
print "$endtimew\n";
print "$starttimew\n\n";
#Windows
my $mquery_win = "D:\\BMC_Software\\BPPMAgent\\Agent\\server\\bin\\mquery.exe -n \@192.168.0.104/1828#mc -a EVENT -v -l D:\\BMC_Software\\BPPMAgent\\Agent\\server -s \"mc_host,date_reception\" -w \"date_reception: between [$starttimew,$endtimew]\" -f CSV >> E:\\powershell.csv";
#Windows
system($mquery_win);
print $mquery_win;
open(TIDAL,'E:\\powershell.csv');
my @array = <TIDAL>;
close TIDAL;
open(OUT,'>','E:\\powershell.csv');
print OUT @array[2..$#array];
close OUT;
);
sleep($timeout);
};
答案 0 :(得分:2)
我认为您对Perl语法的工作方式有一些基本的困惑。请允许我备份一步。
这是一个每三十秒打印一条消息的while循环:
while(1){
print "hi, mom!\n";
sleep 30;
}
这是一个每30秒调用dostuff()
的while循环
while(1){
dostuff();
sleep 30;
}
知道了吗?现在我们需要定义dostuff()
,所以我们添加:
sub dostuff {
print "hi, mom!\n";
}
将它们放在一起,它看起来像这样:
# here's your loop that *calls* dostuff()
while(1){
dostuff();
sleep 30;
}
# here's where you *define* a subroutine called "dostuff"
sub dostuff {
print "hi, mom!\n";
# and obviously all that other code would go in here
}
这有用吗?