如何创建一个名称包含变量的文件,这些变量之间带有下划线。我需要创建一个名为$ variable1_ $ vraiable2_ $ variable3.txt
的文件@values=split(/\./, $line)
my $fpga_name=$values[0];
my $block_name=$values[1];
my $mem_name=$values[2];
my $memfilename="mem_init/$fpga_name_$block_name_$mem_name.txt";
open(WRITE_MEM_FILE, ">>memfilename");
print WRITE_MEM_FILE "$line \n";
答案 0 :(得分:2)
您可以简单地将所有变量包装在花括号中:
my $memfilename="mem_init/${fpga_name}_${block_name}_${mem_name}.txt";
请注意,在开放语句中$
之前需要memfilename
,否则您只需获取文字字符串:
open(WRITE_MEM_FILE, ">>$memfilename");
答案 1 :(得分:1)
问题是你是否需要中间数组和三个额外的变量。如果没有,你可以把整个事情写成:
my $memfilename = sprintf(
'%s_%s_%s.txt',
split(/[.]/, $line, 3), # whether you want 3 here depends on your input
);
如果确实需要这三个中间变量,你仍然可以跳过@value
数组的创建,并编写一些比将三个变量插入字符串更清晰的内容:
my ($fpga_name, $block_name, $mem_name) = split /[.]/, $line, 3;
my $memfilename = sprintf '%s_%s_%s.txt', $fpga_name, $block_name, $mem_name;
使用sprintf
产生的代码比内插三个变量,大括号,下划线,符号等更具可读性。
或者,您也可以使用:
my $memfilename = sprintf '%s.txt', join('_', split /[.]/, $line, 3);
同样,您是否希望第三个参数split
取决于您的输入。
最后,如果你发现自己在不止一个地方这样做,那么将它放在一个函数中会有所帮助
sub line_to_memfilename {
my $line = shift;
# ...
return $memfilename;
}
因此,如果格式发生变化,您只需要在一个地方进行更改。
答案 2 :(得分:0)
指明变量名称的开始位置&写下${varname}
:
my $memfilename="mem_init/${fpga_name}_${block_name}_${mem_name}.txt";