2

我正在考虑在 Perl 中创建一个允许用户创建错误监视器的 Web 应用程序。所以基本上每个“bug watch”都是一个bug ID,它将与“sleep”时间一起传递给子例程,一旦“sleep time”结束,它必须在不阻塞父进程或对等进程的情况下再次出现。

  • 我试过Schedule::Cron。它支持类似 cron 的格式,但这里 subs 的参数必须是简单的标量,因此我排除了它。

  • POE/Coro 似乎是另一种选择,但我对此不太了解/ :(

有什么见解吗?TIA

-马特。

4

4 回答 4

6

Schedule::Cron 有什么问题?您可以创建任何您喜欢的子例程引用,因此您可以创建引用您需要的额外或特定数据的闭包。您不必依赖参数列表。该模块是否还有其他不适合您的地方?

于 2008-11-24T10:13:17.787 回答
4

我尝试了 Schedule::Cron。它支持类似 cron 的格式,但这里 subs 的参数必须是简单的标量,因此我排除了它。

Schedule::Cron 文档说arguments对包含在调用 subroutine 时使用的参数的数组的引用。如果您愿意,可以传递对参数的命名数组的引用。由于 cron 条目包含对 @data 的引用,因此您可以根据需要在代码中添加或删除 @data 元素。

$cron->add_entry(
    '* * * * *',
    subroutine => \&mysub,
    arguments => \@data,
);

正如布赖恩建议的那样,您也可以使用闭包:

my $var = 42;
my @arr = get_stuff();

$cron->add_entry(
    '* * * * *',
    sub { mysub($var, @arr) },
);

有关闭包的更多信息,请参见perlref手册页。

于 2008-11-24T15:39:58.830 回答
1

如果您确实决定研究Coro,那么可能值得一看Continuity,因为这是一个围绕 Coro 构建的 Web 库/框架。

另请查看默认情况下“蹲”在Continuity之上的Squatting web microframework 。Squatting 发行版附带了一些使用Coro::Event的示例。

于 2008-11-24T12:17:42.310 回答
0

@(brian d foy):我认为 Schedule::Cron 对我有好处的原因 1:$cron->add_entry 似乎没有为我提供将 @arrays/$vars 传递给潜艇的选项。

$cron->add_entry("$temp",{'subroutine' => \&test1,'arguments' => \@array}); 不被允许。

2:我不确定是否有办法在 cron->run(detach=>1); 之后添加新的 cron 条目 已被解雇而没有重新启动脚本..

于 2008-11-24T11:05:07.247 回答