Perl使用变量作为文件名
如何创建一个名为的文件,其中包含变量,变量之间带有下划线。我需要创建一个名为$variable1\u$vraiable2\u$variable3.txt的文件Perl使用变量作为文件名,perl,variables,filenames,Perl,Variables,Filenames,如何创建一个名为的文件,其中包含变量,变量之间带有下划线。我需要创建一个名为$variable1\u$vraiable2\u$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";
@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";
您可以简单地将所有变量用大括号括起来:
@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
之前需要一个$
,否则只会得到文本字符串:
@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";
open(WRITE_MEM_FILE, ">>$memfilename");
您可以简单地将所有变量用大括号括起来:
@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
之前需要一个$
,否则只会得到文本字符串:
@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";
open(WRITE_MEM_FILE, ">>$memfilename");
您可以简单地将所有变量用大括号括起来:
@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
之前需要一个$
,否则只会得到文本字符串:
@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";
open(WRITE_MEM_FILE, ">>$memfilename");
您可以简单地将所有变量用大括号括起来:
@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
之前需要一个$
,否则只会得到文本字符串:
@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";
open(WRITE_MEM_FILE, ">>$memfilename");
通过写入
${varname}
指示变量名的开始和结束位置:
@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";
通过写入
${varname}
指示变量名的开始和结束位置:
@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";
通过写入
${varname}
指示变量名的开始和结束位置:
@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";
通过写入
${varname}
指示变量名的开始和结束位置:
@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";
问题是您是否需要中间数组和三个额外变量。如果没有,您可以将整个内容写成:
@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 = sprintf(
'%s_%s_%s.txt',
split(/[.]/, $line, 3), # whether you want 3 here depends on your input
);
如果确实需要三个中间变量,您仍然可以跳过@value
数组的创建,并编写比将三个变量插入字符串更清晰的内容:
@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 ($fpga_name, $block_name, $mem_name) = split /[.]/, $line, 3;
my $memfilename = sprintf '%s_%s_%s.txt', $fpga_name, $block_name, $mem_name;
使用sprintf
生成的代码比插入大括号、下划线、符号等三个变量可读性更强
@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";
或者,您也可以使用:
@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 = sprintf '%s.txt', join('_', split /[.]/, $line, 3);
同样,是否要将第三个参数拆分取决于您的输入
@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";
最后,如果您发现自己在多个位置执行此操作,那么将其放在函数中会有所帮助
@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";
sub line_to_memfilename {
my $line = shift;
# ...
return $memfilename;
}
因此,如果格式发生更改,只需在一个位置进行更改。问题在于是否需要中间数组和三个额外变量。如果没有,您可以将整个内容写成:
@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 = sprintf(
'%s_%s_%s.txt',
split(/[.]/, $line, 3), # whether you want 3 here depends on your input
);
如果确实需要三个中间变量,您仍然可以跳过@value
数组的创建,并编写比将三个变量插入字符串更清晰的内容:
@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 ($fpga_name, $block_name, $mem_name) = split /[.]/, $line, 3;
my $memfilename = sprintf '%s_%s_%s.txt', $fpga_name, $block_name, $mem_name;
使用sprintf
生成的代码比插入大括号、下划线、符号等三个变量可读性更强
@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";
或者,您也可以使用:
@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 = sprintf '%s.txt', join('_', split /[.]/, $line, 3);
同样,是否要将第三个参数拆分取决于您的输入
@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";
最后,如果您发现自己在多个位置执行此操作,那么将其放在函数中会有所帮助
@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";
sub line_to_memfilename {
my $line = shift;
# ...
return $memfilename;
}
因此,如果格式发生更改,只需在一个位置进行更改。问题在于是否需要中间数组和三个额外变量。如果没有,您可以将整个内容写成:
@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 = sprintf(
'%s_%s_%s.txt',
split(/[.]/, $line, 3), # whether you want 3 here depends on your input
);
如果确实需要三个中间变量,您仍然可以跳过@value
数组的创建,并编写比将三个变量插入字符串更清晰的内容:
@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 ($fpga_name, $block_name, $mem_name) = split /[.]/, $line, 3;
my $memfilename = sprintf '%s_%s_%s.txt', $fpga_name, $block_name, $mem_name;
使用sprintf
生成的代码比插入大括号、下划线、符号等三个变量可读性更强
@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";
或者,您也可以使用:
@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 = sprintf '%s.txt', join('_', split /[.]/, $line, 3);
同样,是否要将第三个参数拆分取决于您的输入
@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";
最后,如果您发现自己在多个位置执行此操作,那么将其放在函数中会有所帮助
@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";
sub line_to_memfilename {
my $line = shift;
# ...
return $memfilename;
}
因此,如果格式发生更改,只需在一个位置进行更改。问题在于是否需要中间数组和三个额外变量。如果没有,您可以将整个内容写成:
@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 = sprintf(
'%s_%s_%s.txt',
split(/[.]/, $line, 3), # whether you want 3 here depends on your input
);
如果确实需要三个中间变量,您仍然可以跳过@value
数组的创建,并编写比将三个变量插入字符串更清晰的内容:
@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 ($fpga_name, $block_name, $mem_name) = split /[.]/, $line, 3;
my $memfilename = sprintf '%s_%s_%s.txt', $fpga_name, $block_name, $mem_name;
使用sprintf
生成的代码比插入大括号、下划线、符号等三个变量可读性更强
@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";
或者,您也可以使用:
@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 = sprintf '%s.txt', join('_', split /[.]/, $line, 3);
同样,是否要将第三个参数拆分取决于您的输入
@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";
最后,如果您发现自己在多个位置执行此操作,那么将其放在函数中会有所帮助
@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";
sub line_to_memfilename {
my $line = shift;
# ...
return $memfilename;
}
因此,如果格式发生变化,您只需要在一个地方进行更改。您可以更简洁地编写前四行:
my($fpga\u name,$block\u name,$mem\u name)=split(/\./,$line)代码>。您还应该使用open的3参数形式,词法文件句柄,并检查open
是否成功,例如open(my$fh,'>>,$memfilename)或die“未能打开'$memfilename':$!”
您可以这样更简洁地编写前四行:my($fpga\u name、$block\u name、$mem\u name)=split(/\./,$line)代码>。您还应该使用open的3参数形式,词法文件句柄,并检查open
是否成功,例如open(my$fh,'>>,$memfilename)或die“未能打开'$memfilename':$!”
您可以这样更简洁地编写前四行:my($fpga\u name、$block\u name、$mem\u name)=split(/\./,$line)代码>。您还应该使用open的3参数形式,词法文件句柄,并检查open
是否成功,例如open(my$fh,'>>,$memfilename)或die“未能打开'$memfilename':$!”
您可以这样更简洁地编写前四行:my($fpga\u name、$block\u name、$mem\u name)=split(/\./,$line)代码>。您还应该使用3参数形式的开放式词法文件句柄,并检查
@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";