我正在尝试在perl脚本中打开一个文本文件。文件名的一部分包含YYYYMMDD格式的日期,该日期会发生变化。我在正确构建文件路径时遇到问题。
完整文件名:
abc_20160825_filename.txt
代码:
use POSIX qw(strftime);
$currdate = strftime "%Y%m%d\n", localtime;
$filename = 'directory/', $currdate '_filename.txt';
open(FILE, $filename) or die "Cant find file";
答案 0 :(得分:1)
有几件事,你的strftime调用中有\n
,它会附加一个新行。你不想要这个。你没有在这里正确地连接你的字符串:
$filename = 'directory/', $currdate '_filename.txt';
它是.
而不是,
,并且变量和_filename.txt
之间没有。{以下示例包含use strict; use warnings;
并执行您想要的操作:
use strict;
use warnings;
use POSIX qw(strftime);
my $currdate = strftime( "%Y%m%d", localtime );
my $filename = 'directory/' . $currdate . '_filename.txt';
print $filename;
编辑,也使用3个参数open,然后告诉你失败的原因:
open(FILE,'<', $filename) or die "Cant find file $!\n";
答案 1 :(得分:0)
你说你想要创建一个名为abc_20160825_filename.txt
的文件,但是你的Perl代码(甚至不能编译)看起来像是在试图创建directory/20160825_filename.txt
。请问哪个?
我建议您将Time::Piece
模块与sprintf
一起使用。这个示例程序生成两个变体,我希望很容易看到你如何修改它
use strict;
use warnings 'all';
use feature 'say';
use Time::Piece 'localtime';
{
my $filename = sprintf
'abc_%s_filename.txt',
localtime->strftime('%Y%m%d');
say $filename;
}
{
my $filename = sprintf
'directory/%s_filename.txt',
localtime->strftime('%Y%m%d');
say $filename;
}
abc_20160825_filename.txt
directory/20160825_filename.txt
答案 2 :(得分:-3)
我正在使用PHP,但我认为它类似于Perl。
$currdate = strftime "%Y%m%d\n", localtime;
$filename = "directory/$currdate_filename.txt";
你所做的就是构建字符串的语法。
构建字符串的另一种方法是这样的:
$currdate = strftime "%Y%m%d\n", localtime;
$filename = "directory/" . $currdate . "_filename.txt";
请检查Perl是否使用.
之类的PHP,或+
之类的JavaScript来链接单独的文本元素。