我的问题很简单一个...我的perl代码如下...
$todaydate = `date +%Y-%m-%d-%H%M%S`;
$output_file = "my_data_$todaydate".".csv";
print "SQL query output file name : $output_filen";
,但输出文件名称如下所示...
SQL query output file name : my_data_2017-10-03-062227
.csv
如果您可以观察,则.CSV将以新的方式出现。我还尝试了以下连接以进行字符串调节剂。但仍然没有运气。
$output_file = join "", "my_data_", $todaydate, ".csv";
由于这个问题,当我将output_file名称传递给SQL查询时,它创建文件my_data_2017-10-03-03-062227不带.CSV扩展。
任何建议请...
您可能不想不必要地使用外部程序的原因有几个。
- 在您想运行程序的某些系统上,外部程序可能没有(或可能有所不同)。因此,您正在使代码降低便携。
- 启动新外壳并调用外部程序所需的时间更长,而不仅仅是使用Perl功能来获得相同的结果。
- 从外部问题返回的值可能会在最后具有newline字符 - 您可能会忘记将其删除。
获得日期是人们通常想使用外部程序的任务。而且我不明白为什么,因为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_filen";
自2007年以来,所有版本的Perl都包含了 Time :: pries。它改变了localtime()
的行为,因此它返回对象。并且该对象有许多有用的方法 - 在这里我们使用strftime()
。
如果您遇到了较旧版本的perl(pre-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_filen";
在您的$todaydate
变量中使用chomp。
my $todaydate = `date +%Y-%m-%d-%H%M%S`;
chomp $todaydate;
my $output_file = "my_data_$todaydate.csv";
始终将use warnings;
和use strict;
放在程序的顶部。
它的原因是$todaydate
末尾的新行字符。在下面使用以下内容:
$todaydate =~ s/n|r//g;
上面的代码将删除n
或r
的任何发生。