加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我应该手动设置Perl的@ARGV,以便我可以使用<>打开,扫描和

发布时间:2020-12-15 21:49:08 所属栏目:大数据 来源:网络整理
导读:我最近开始学习Perl,我最近的任务之一就是搜索一堆特定字符串的文件.用户提供目录名作为参数,程序将搜索该目录中的所有文件以查找该模式.使用readdir()我已经设法构建了一个包含所有可搜索文件名的数组,现在需要搜索模式的每个文件,我的实现看起来像这样 –
我最近开始学习Perl,我最近的任务之一就是搜索一堆特定字符串的文件.用户提供目录名作为参数,程序将搜索该目录中的所有文件以查找该模式.使用readdir()我已经设法构建了一个包含所有可搜索文件名的数组,现在需要搜索模式的每个文件,我的实现看起来像这样 –
sub searchDir($) {
    my $dirN = shift;
    my @dirList = glob("$dirN/*");
    for(@dirList) {
        push @fileList,$_ if -f $_;

    }
    @ARGV = @fileList;
    while(<>) {
        ## Search for pattern
    }
}

我的问题是 – 如上所述,手动加载@ARGV数组是否可以,并使用<>运算符扫描单独的行还是应该单独打开/扫描/关闭每个文件?如果这个处理存在于子程序而不是主函数中会有什么不同吗?

解决方法

关于操纵@ARGV的主题 – 那肯定是工作代码,Perl当然允许你这样做.我不认为这是一个很好的编码习惯.我见过的大部分代码都使用“while(<>)”成语来使用它来读取标准输入,这就是我最初期望你的代码所做的事情.更可读的模式可能是单独打开/关闭每个输入文件:
foreach my $file (@files) {
    open FILE,"<$file" or die "Error opening file $file ($!)";
    my @lines = <FILE>;
    close FILE or die $!;

    foreach my $line (@file) {
        if ( $line =~ /$pattern/ ) {
            # do something here!
        }
    }
}

这对我来说更容易阅读,尽管它还有一些代码. Perl为您提供了很大的灵活性,但我认为这使得在Perl中开发自己的风格变得更加重要,这对您(以及您的同事,如果这对您的代码/职业很重要)是可读和可理解的.

将子程序放在主函数或子程序中也是一个风格决定,你应该玩和思考.现代计算机在这方面的速度如此之快,以至于样式和可读性对于这样的脚本来说更为重要,因为您不太可能遇到这样的脚本对您的硬件进行过度征税的情况.

祝好运! Perl很有趣.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读