Perl 使用变量作为文件名
Perl use variable as a file name
如何创建名称包含变量且变量之间有下划线的文件。我需要创建一个名称类似于 $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";
您可以简单地将所有变量括在花括号中:
my $memfilename="mem_init/${fpga_name}_${block_name}_${mem_name}.txt";
请记住,在您的 open 语句中 memfilename
之前需要一个 $
,否则您只会得到文字字符串:
open(WRITE_MEM_FILE, ">>$memfilename");
通过写作 ${varname}
:
来指示变量名称开始和结束的位置
my $memfilename="mem_init/${fpga_name}_${block_name}_${mem_name}.txt";
问题是你是否需要中间数组,以及三个额外的变量。如果没有,你可以把整个事情写成:
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;
}
因此,如果格式发生变化,您只需在一个地方进行更改。
如何创建名称包含变量且变量之间有下划线的文件。我需要创建一个名称类似于 $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";
您可以简单地将所有变量括在花括号中:
my $memfilename="mem_init/${fpga_name}_${block_name}_${mem_name}.txt";
请记住,在您的 open 语句中 memfilename
之前需要一个 $
,否则您只会得到文字字符串:
open(WRITE_MEM_FILE, ">>$memfilename");
通过写作 ${varname}
:
my $memfilename="mem_init/${fpga_name}_${block_name}_${mem_name}.txt";
问题是你是否需要中间数组,以及三个额外的变量。如果没有,你可以把整个事情写成:
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;
}
因此,如果格式发生变化,您只需在一个地方进行更改。