我的问题很简单...... 我的perl代码如下所示......
$todaydate = `date +%Y-%m-%d-%H%M%S`;
$output_file = "my_data_$todaydate".".csv";
print "SQL query output file name : $output_file\n";
但输出文件名如下所示打印...
SQL query output file name : my_data_2017-10-03-062227
.csv
如果你能观察到,.csv就会进入新的界限。 我也尝试了下面的字符串conactantion连接。但仍然没有运气。
$output_file = join "", "my_data_", $todaydate, ".csv";
由于这个问题,当我将output_file名称传递给sql查询时,它创建了一个没有.csv扩展名的文件my_data_2017-10-03-062227。
请提出任何建议......
答案 0 :(得分:8)
您可能不希望不必要地使用外部程序有几个原因。
获取日期是人们通常想要使用外部程序的任务。而且我不明白为什么,因为Perl有很好的内置时间和日期处理能力。例如,您的代码可以这样写:
use Time::Piece;
$todaydate = localtime->strftime('%Y-%m-%d-%H%M%S');
$output_file = "my_data_$todaydate.csv";
print "SQL query output file name : $output_file\n";
自2007年以来, Time::Piece已包含在所有版本的Perl中。它会更改localtime()
的行为,以便返回一个对象。该对象有许多有用的方法 - 这里我们使用strftime()
。
如果您使用旧版本的Perl(5.10之前版本),那么无需调用外部程序即可轻松完成此操作。
use POSIX 'strftime';
$todaydate = strftime('%Y-%m-%d-%H%M%S', localtime);
$output_file = "my_data_$todaydate.csv";
print "SQL query output file name : $output_file\n";
答案 1 :(得分:2)
在$todaydate
变量中使用chomp。
my $todaydate = `date +%Y-%m-%d-%H%M%S`;
chomp $todaydate;
my $output_file = "my_data_$todaydate.csv";
始终将use warnings;
和use strict;
放在程序的顶部。
答案 2 :(得分:-2)
因为$todaydate
末尾的新行字符。使用下面的方法来修复它:
$todaydate =~ s/\n|\r//g;
上述代码会删除\n
或\r
的所有内容。