生成 Perl 日期时间?

Perl datetime generated?

我有一个 perl 脚本,它获取系统日期并将该日期写入文件名。

系统日期分配给 TRH1 变量,然后设置为文件名。

$TRH1 =`date + %Y%m%d%H%M`;
print "TRH1 => $TRH1\n";
open(TPFILE, ">./log/errTS_TPList_$TRH1.csv"); 

然而,TRH1 似乎有正确的值,但文件名有一个问号,这是我不想要的。

TRH1 => 202103031940
errTS_TPList_202103031940?.csv

你能告诉我如何摆脱这个“?” ?

当你执行shell命令时,你需要chomp它。

也使用现代方式写入文件,使用词法文件句柄。

这样试试:

#!/usr/bin/perl 

use strict; use warnings;

my $TRH1 = `date +%Y%m%d%H%M`;
chomp $TRH1;

print "TRH1 => $TRH1\n";

my $filename = "log/errTS_TPList_$TRH1.csv";
open(my $TPFILE, '>:encoding(UTF-8)', $filename)
  or die "Could not open file '$filename'";

正如您 一样,这是因为 date 的输出末尾有一个换行符,您需要使用 chomp().

将其删除

但是,确实没有必要使用外部程序来获取日期和时间。 Perl 的现代版本带有 Time::Piece,这使得这个变得微不足道:

use Time::Piece;

# Perl style generally reserves uppercase variable names
# for constants
my $trh1 = localtime->strftime("%Y%m%d%H%M");

使用旧版本的 Perl,您可以使用 POSIX:

中的 strftime()
use POSIX 'strftime';

my $trh1 = strftime("%Y%m%d%H%M", localtime);