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