perl - 今天的日期匹配不正确
问题描述
我正在编写一个基本的 Perl 脚本来检查某些目录中是否有文件,它们的名称包含今天的日期,当目录中有文件并返回 TRUE 时脚本工作正常,但当没有文件时不返回 FALSE存在给定的标准
脚本如下:
#!/usr/bin/perl -w
use POSIX qw(strftime);
my $datestring = strftime "%Y%m%d", localtime;
opendir(DIR, 'C:\Perl');
@files = grep (/$datestring/,readdir(DIR));
closedir(DIR);
foreach $file (@files) {
my $count = () = $file =~ /$datestring/;
if ($count > 0) {
print ("TRUE");
}
else
{
print ("FALSE");
}
}
文件名就像
export_opportunities_20181111-040005_20181124-040010.csv
export_opportunities_20181111-040005_20181122-040010.csv
解决方案
正如 toolic 评论的那样,当您已经在此处删除不匹配的文件时:
@files = grep (/$datestring/,readdir(DIR));
因此,您的for
循环将永远不会看到不匹配的文件。
以下是对您的代码的其他一些评论:
总是
use strict
和use warnings
(您的代码片段中有几个未正确声明的变量)始终检查系统调用的返回码,例如
opendir
您可以在布尔上下文中使用 smartmatch 运算符,而不是分配给
$count
变量您不需要在内置
print
函数的参数周围使用括号
这是您的代码的更简洁版本:
#!/usr/bin/perl -w
use strict;
use warnings;
use POSIX qw(strftime);
my $datestring = strftime "%Y%m%d", localtime;
opendir(DIR, 'C:\Perl') or die "cannot open dir : $!";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
if ($file =~ /$datestring/) {
print "TRUE\n";
} else {
print "FALSE\n";
}
}
推荐阅读
- java - 从 RecyclerView 中的项目触发单击和拖动操作
- java - 在 java 中使用 restTemplate 将 text/html 解析为 application/json
- vue.js - 每次按下按钮时如何进行v-card的扩展过渡
- python - 使用 openpyxl 在工作簿之间复制数据
- python - 对具有一些相交索引的数据帧求和
- typescript - openapi typescript-fetch 将不可为空的类型生成为可为空的
- android - 如何制作两个相同大小的 Theme.MaterialComponents.Dialog?
- java - Discord bot 无法验证用户是否不存在,抛出 indexoutofbounds 错误
- c# - 从另一个数组的一个日期排序一个数组
- spring-boot - Spring Boot Caching 仅使用 NoOp 缓存而不是配置的缓存类型