在Perl中操作文件的某些行

时间:2014-11-05 22:20:45

标签: regex perl file-io io cron

这基本上是关于文件操作的问题。我正在处理一个Perl脚本,该脚本将作为一个cron作业运行,当某些值显示在网页上时会发送一封电子邮件,但只会重复一次,直到该值重置为止(它包含一个包含报告的页面)在报告需要注意时显示警报的审核)。我已经弄明白了如何解析警报页面,我知道如何通过Perl发送电子邮件,我很难弄清楚何时发送电子邮件的逻辑。我收集到需要创建一个单独的文件(alerts.txt)来存储在上一次执行脚本期间有警报的报告。在这种情况下,您需要在脚本中处理4个方案。 1)报告有一个警报,并且不在alerts.txt中(需要添加)。 2)报告没有警报,但是在先前执行脚本的情况下处于alerts.txt中(需要删除)。 3)报告没有警报,也没有警报.txt(什么都不做)。 4)报告有警报,已经在alerts.txt(什么都不做)。

这是最好的方法吗?如果是这样,那么实施上述方案#1和#2的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我假设你已选择不使用数据库 - 这在某些情况下是有效的,但随着应用程序的增长,你可能会改变主意。

最简单的方法是使用perl内置的Storable模块。注意,这会产生非人类可读的格式,但可以存储非常复杂的数据结构;

#!/usr/bin/env perl
use Storable;

# Create some alerts data, and store it in a data file
my $alerts = {};
$alerts->{report_01} = 'alert';
$alerts->{report_02} = 'ok';
store $alerts, 'alerts.data';

# Read it back
my $prev_alerts = retrieve('alerts.data');
foreach my $key (keys %$prev_alerts) {
 print "$key=$prev_alerts->{$key}\n";
}

如果您需要人类可读的格式,可以使用各种选项来支持基于文件的存储;