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

How to print a string value in single line using Perl

我的问题很简单... 我的 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 将换行。 我还尝试了下面的字符串连接连接。但仍然没有运气。

$output_file = join "", "my_data_", $todaydate, ".csv";

由于这个问题,当我将 output_file 名称传递给 sql 查询时,它创建了一个没有 .csv 扩展名的文件 my_data_2017-10-03-062227。

有什么建议请...

在你的 $todaydate 变量中使用 chomp。

my $todaydate = `date +%Y-%m-%d-%H%M%S`;
chomp $todaydate;
my $output_file = "my_data_$todaydate.csv";

始终将 use warnings;use strict; 放在程序的顶部。

您可能不想在不必要的情况下使用外部程序的原因有多种。

  • 在您想要 运行 您的程序的某些系统上,外部程序可能不可用(或工作方式可能不同)。因此,您正在降低代码的可移植性。
  • 启动一个新的 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() 的行为,因此它 returns 是一个对象。而且该对象有很多有用的方法——这里我们使用 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";

因为$todaydate末尾有换行符。使用下面的方法修复它:

$todaydate =~ s/\n|\r//g;

以上代码将删除任何出现的 \n\r