热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Perl-无法打开和读取文件

如何解决《Perl-无法打开和读取文件》经验,为你挑选了1个好方法。



1> zdim..:

readdir回报单纯的文件名,不带路径.

因此,当您继续打开这些文件时,您需要在此处添加返回readdir的名称和readdir读取它们的目录的名称$filepath.或者立即建立完整的路径名称

use warnings;
use strict;
use feature 'say';
use File::Spec;

print "Enter the path: ";
my $filepath = ;
chomp $filepath;

die "\nPlease give input folder\n" if !defined $filepath or !-d $filepath;

opendir(my $fh_dir, $filepath) or die "Can't opendir $filepath: $!";

my @xml_files = 
    map { File::Spec->catfile($filepath, $_) } 
    grep { /\.xml$/ } 
    readdir $fh_dir;

closedir $fh_dir;

say for @xml_files;

我使用File :: Spec将文件名可拆分地拼凑在一起.


以下是对代码的一些评论.请注意,这通常在Code Review中完成,但我觉得这里需要它.

第一:预先声明一长串变量.事实上,在尽可能小的范围内声明是很重要的.事实证明,大多数变量确实可以在使用它们的地方声明,如下面的评论所示.

使用可以最好地找到可执行文件的位置

use FindBin qw($RealBin);

哪里$RealBin也解析链接(相对于$Bin,也可用)

()在声明处分配给数组不会做任何事情; 它与正常情况完全一样my @errors;.他们也可以一起去my (@errors, @warnings, @checks);.如果数组有东西然后= ()清除它,什么是清空数组的好方法

分配a "0"使变量成为字符串.虽然Perl通常根据需要在字符串和数字之间进行转换,但如果需要数字则使用数字,my $z = 0;

词法文件句柄(open my $fh, ...)比globs(open FH, ...)更好

我不理解排序中关于" 数字错误 " 的评论.该cmp运营商的字典顺序,对数字排序使用<=>

当在标量上下文中使用数组时 - 例如,当分配给标量时 - 返回元素的数量.所以不需要,scalar但做my flcnt = @xmlF;

对于数组索引的迭代,使用for $#ary的最后一个元素的索引@ary

foreach my $i (0..$#xmlF) { ... }

但是,如果没有任何索引的使用(我没有看到任何),那么循环元素

foreach my $file (@xmlF) { ... }

检查文件时open 打印错误 $!,open ... or die "... : $!";.这是在代码的其他地方完成的,应该始终这样做.

local $/;取消设置的输入记录分隔符,是什么让下面的读取整个文件.如果这是打算,那么$line这不是一个好名字.另请注意,变量可以在条件内声明,while (my $line = <$fh>) { }

我不能评论正则表达式,因为我不知道它应该完成什么,但它很复杂; 有什么机会简化这一切吗?

一系列foreach循环只能计算出那些数组的元素数量; 那么就不需要循环,只需my $ecount = @errors;(等).这也允许您将这些计数器变量的声明保持在最小范围内.

undef @errors;(等)是不需要的,因为这些数组数为每个文件,所以你可以声明它们的环内,在最小的范围内.另请注意,如果要清空数组,最好@ary = ();再进行操作undef.


推荐阅读
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了如何使用OpenXML按页码访问文档内容,以及在处理分页符和XML元素时的一些挑战。同时,还讨论了基于页面的引用框架的局限性和超越基于页面的引用框架的方法。最后,给出了一个使用C#的示例代码来按页码访问OpenXML内容的方法。 ... [详细]
author-avatar
冰忆ch
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有