String perl变量内部的字符串内部的背面标记

String perl变量内部的字符串内部的背面标记,string,perl,variables,String,Perl,Variables,我有一个文件名,格式为electric_inventory_WE_20170730_195758.dat。每天都会创建一个类似的文件。创建的时间可能会有所不同。我需要用今天的日期捕获文件名,不必担心时间,并以.dat扩展名结束 我已经为今天的日期创建了一个变量。我需要在back ticks中的字符串中使用这个变量。大概是这样的: my $today = `date "+%Y%m%d"`; my $filename = `ls electric_inventory_WE_$today*.dat`

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

我已经为今天的日期创建了一个变量。我需要在back ticks中的字符串中使用这个变量。大概是这样的:

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

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

我找不到一种方法让这个变量在后刻度内的字符串中工作。任何帮助都将不胜感激。

这正是在backticks中使用变量的方式

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

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

ls electric_inventory_WE_20170330
*.dat
一种可能的解决方案是完全避免使用shell(以及外部命令,如
date
ls
):


感谢所有提供这方面信息的人,我为交叉帖子道歉。多亏了你的帖子,我才能够使用以下方法来实现这一点:


my$filename=“电气库存我们”$今天“*.dat”

+1表示“避免使用shell”。太多人将perl(和其他语言)视为美化的shell脚本,因为只需编写几行额外的代码并在内部执行就更安全、更健壮了。请不要在不告知所有位置的情况下这样做。这避免了浪费不在所有交叉发布站点上的其他人的时间。这与您描述的完全不同。这实际上只是将
“electric\u inventory\u WE\u 20170730.*.dat”
分配给
$filename
;它不会解析为实际的文件名。
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;