Perl使用变量作为文件名

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";

如何创建一个名为的文件,其中包含变量,变量之间带有下划线。我需要创建一个名为$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";
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";