生成 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);
我有一个 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);