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

时间:2017-10-03 13:41:04

标签: perl string-concatenation

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

请提出任何建议......

3 个答案:

答案 0 :(得分:8)

您可能不希望不必要地使用外部程序有几个原因。

  • 在您要运行程序的某些系统上,外部程序可能不可用(或可能以不同方式工作)。因此,您的代码不易移植。
  • 启动新shell并调用外部程序所需的时间比使用Perl功能获得相同的结果要长。
  • 从外部问题返回的值最后可能会有换行符 - 您可能忘记将其删除。

获取日期是人们通常想要使用外部程序的任务。而且我不明白为什么,因为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的所有内容。