如何使用perl将字符串值打印在单行中



我的问题很简单一个...我的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;

上面的代码将删除nr的任何发生。

最新更新