【问题标题】:perl variable inside a string inside back ticks反引号内的字符串内的 perl 变量
【发布时间】:2018-01-06 04:10:49
【问题描述】:

我有一个格式为electric_inventory_WE_20170730_195758.dat 的文件名。每天都会创建一个类似的文件。创建的时间可能会有所不同。我需要用今天的日期捕获文件名,不用担心时间并以 .dat 扩展名结尾。

我为今天的日期创建了一个变量。我需要在反引号内的字符串中使用此变量。像这样的:

my $today = `date "+%Y%m%d"`;

my $filename = `ls electric_inventory_WE_$today*.dat`;

我找不到让这个变量在反引号内的字符串中工作的方法。任何帮助将不胜感激。

【问题讨论】:

  • 请不要在cross post 不告诉所有位置您已经这样做了。这样可以避免浪费不在所有交叉发布网站上的其他人的时间。

标签: string perl variables


【解决方案1】:

这正是您在反引号中使用变量的方式。

我不确定实际的问题是什么(“我找不到让这个工作的方法”不是一个有用的问题描述),但这是我的猜测:

`date ...` 返回一个带有尾随换行符的字符串 "\n",因此您实际运行的命令最终是:

ls electric_inventory_WE_20170330
*.dat

一个可能的解决方案是完全避免使用 shell(以及外部命令,例如 datels):

use POSIX qw(strftime);

my $today = strftime "%Y%m%d", localtime;
my @candidates = glob "electric_inventory_WE_$today*.dat";
if (@candidates != 1) {
    ...   # handle error: either 0 or more than 1 files were found
}
my $filename = shift @candidates;

【讨论】:

  • +1 表示“避免使用外壳”。太多人将 perl(和其他语言)视为美化的 shell 脚本,而只编写几行额外的代码并在内部执行会更安全、更健壮。
【解决方案2】:

感谢所有提供这方面的信息,我对交叉帖子表示歉意。感谢您的帖子,我能够使用以下方法来使其正常工作:

我的 $filename="electric_inventory_WE_" 。今日美元。 "*.dat";

【讨论】:

  • 这与您描述的完全不同。这实际上只是将"electric_inventory_WE_20170730_*.dat" 分配给$filename;它不会解析为实际的文件名。
猜你喜欢
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 2011-04-23
  • 2011-05-11
  • 2021-03-07
相关资源
最近更新 更多