我应该手动设置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很有趣. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |