使用Filename中的变量打开文本文件

时间:2016-08-25 13:20:59

标签: 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 "Cant find file";

3 个答案:

答案 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来链接单独的文本元素。