Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用文件名中的变量打开文本文件_Perl - Fatal编程技术网

Perl 使用文件名中的变量打开文本文件

Perl 使用文件名中的变量打开文本文件,perl,Perl,我试图用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

我试图用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";
代码:

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";

我正在使用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一样使用
+
来链接单独的文本元素。

有几件事,您的strftime调用中有
\n
,它附加了一行新行。你不会想要这个的。您没有在此处正确连接字符串:

$filename = 'directory/', $currdate '_filename.txt';
它是
而不是
,变量和
\u filename.txt
之间没有一个。下面的例子包括
use strict;使用警告并执行您想要的操作:

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(FILE,'<', $filename) or die "Cant find file $!\n";

open(FILE,你说你想创建一个名为
abc_20160825_filename.txt
,但是你的Perl代码(甚至不会编译)看起来像是在试图创建
目录/20160825_filename.txt
。请问是哪一个

我建议您将该模块与
sprintf
一起使用。这个示例程序生成这两种变体,我希望很容易看到如何修改它

使用严格;
使用“全部”警告;
使用特征“说”;
使用时间::片段“localtime”;
{
我的$filename=sprintf
“abc_u%s_filename.txt”,
localtime->strftime(“%Y%m%d”);
说$filename;
}
{
我的$filename=sprintf
'目录/%s_filename.txt',
localtime->strftime(“%Y%m%d”);
说$filename;
}
输出
abc_20160825_filename.txt
目录/20160825_filename.txt

确切的问题是什么?我定义了一个导致日期字符串的变量(例如20160825)。然后,我尝试将其替换为文件名,以替换包含20160825日期文本的文本文件,然后用perl脚本打开该文件。是的,我理解。但我不明白您的问题是什么您说您想创建一个名为
abc_20160825_filename.txt
,但您的perl代码(甚至无法编译)看起来它正在尝试创建
目录/20160825\u filename.txt
。请问是哪一个?您在
$currdate
后面附加了一个新行,它将用作文件名的一部分。字符串的单引号,除非您正在进行插值。请测试您的解决方案。您正在向全世界发布应该发布的内容作为OP问题的解决方案,您甚至不测试您的建议!使用您的代码,perl将尝试插入不存在的变量
$currdate\u filename
。它将生成警告消息
在串联中使用未初始化值$currdate\u filename(.)或字符串
并设置
$filename
top
directory/.txt