我应该从自己的perl模块中读取ARGV

我应该从自己的perl模块中读取ARGV,第1张

概述我的Perl从(多个)日志文件中提取和处理数据,当前正在处理@ARGV中的所有文件. 这个脚本最重要的部分是日志解码本身,它结合了很多关于日志文件格式的知识.这个转换部分来自log(实际上是一个散列数组)已被证明是变化的主题(随着日志格式的发展),并成为进一步处理步骤的基础:从解码记录中经常有特定的问题要回答在Perl中做得最好,这就是为什么我想把它变成一个模块. 核心功能是使用嵌套(或命名为作用 我的Perl从(多个)日志文件中提取和处理数据,当前正在处理@ARGV中的所有文件.

这个脚本最重要的部分是日志解码本身,它结合了很多关于日志文件格式的知识.这个转换部分来自log(实际上是一个散列数组)已被证明是变化的主题(随着日志格式的发展),并成为进一步处理步骤的基础:从解码记录中经常有特定的问题要回答在Perl中做得最好,这就是为什么我想把它变成一个模块.

核心功能是使用嵌套(或命名为作用域)模式匹配坐在while(<>)循环中:

while (<ARGV>) {    $totallines ++;    if (m/^(\d{4}-\d\d-\d\d \d\d:\d\d:\d\d) L(\d) (.+)/) {        my $time = ;        my $line = ;        my $event = ;        if ($event =~ m/^connect: (.+)$/) {            $pendings{$line}{station} = ;            ...

…在关闭括号之前有超过200行.

我觉得简单地从ARGV阅读将超过Do one thing and do it well规则.当我搜索网络时,我发现在模块中没有任何明确说明或反对ARGV阅读的内容,但也许我的搜索模式很差. [1] [2]

(如何)我应该重新构建解码器以将其放入模块中?…或者我应该改变对此的感受?

[1] perltrap – perldoc.perl.org
[2] perlmodstyle – perldoc.perl.org

解决方法 你可以让你的功能不知道< ARGV>迭代器逻辑,

sub foo {    my ($iter) = @_;    # `defined()` should be used explicitly unlike `while (<ARGV>)`    while (defined (my $line = $iter->())) {        # if ..    }}foo(sub{ scalar <ARGV> }); # force scalar context; one line/record per call
总结

以上是内存溢出为你收集整理的我应该从自己的perl模块中读取ARGV全部内容,希望文章能够帮你解决我应该从自己的perl模块中读取ARGV所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1245142.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存