String 如何在Perl中组合字符串中的变量

String 如何在Perl中组合字符串中的变量,string,perl,String,Perl,我希望将$file设置为: $name = "LPA"; $date= 39; $file = "/pathtoFile/window/$name/cavin_l/'$name'_formula_24rw$date.csv"; 但它将$file设置为: 有人能帮我找出正确的语法吗?我似乎无法理解它。一种方法是在变量名周围使用大括号,如下所示: /pathtoFile/window/LPA/cavin_l/'39.csv 此语法如中所述 与在某些she

我希望将$file设置为:

$name = "LPA";
$date= 39;

$file = "/pathtoFile/window/$name/cavin_l/'$name'_formula_24rw$date.csv";
但它将$file设置为:


有人能帮我找出正确的语法吗?我似乎无法理解它。

一种方法是在变量名周围使用大括号,如下所示:

/pathtoFile/window/LPA/cavin_l/'39.csv
此语法如中所述

与在某些shell中一样,可以将变量名括在大括号中以 从以下字母数字和下划线中消除歧义


一种方法是在变量名周围使用大括号,如下所示:

/pathtoFile/window/LPA/cavin_l/'39.csv
此语法如中所述

与在某些shell中一样,可以将变量名括在大括号中以 从以下字母数字和下划线中消除歧义


与Perl中的大多数内容一样,有许多方法可以完成相同的任务

可以使用{}定义变量名的边界

my$file1=/pathtoFile/window/$name/cavin_l/${name}\u formula_24rw$date.csv

或者,您可以使用连接来连接字符串

我的$file2=/pathtoFile/window/$name/cavin\l/$名称。_公式_24rw$日期csv

这两种方法产生相同的结果

$file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
输出

use strict;
use warnings;

my $name="LPA";
my $date="39";

my $file1="/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
my $file2="/pathtoFile/window/$name/cavin_l/" . $name ."_formula_24rw" . $date . ".csv";

print "$file1\n$file2\n";

与Perl中的大多数内容一样,有许多方法可以完成相同的任务

可以使用{}定义变量名的边界

my$file1=/pathtoFile/window/$name/cavin_l/${name}\u formula_24rw$date.csv

或者,您可以使用连接来连接字符串

我的$file2=/pathtoFile/window/$name/cavin\l/$名称。_公式_24rw$日期csv

这两种方法产生相同的结果

$file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
输出

use strict;
use warnings;

my $name="LPA";
my $date="39";

my $file1="/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
my $file2="/pathtoFile/window/$name/cavin_l/" . $name ."_formula_24rw" . $date . ".csv";

print "$file1\n$file2\n";
这个。。。在字符串中插入变量。然后问题是,在您的尝试中,变量名没有被清晰地描述,解释器最终会寻找

/pathtoFile/window/LPA/cavin_l/LPA_formula_24rw39.csv
/pathtoFile/window/LPA/cavin_l/LPA_formula_24rw39.csv
也就是说,包$name中的变量_formula_24rw;这是因为由于历史原因,$文件中$name之后的“after a variable name so”仍然是::。因为没有这样的变量,所以最后是$date的第一个“值”,然后是$date的值

最重要的收获:使用警告;我会抓到这个的。试着跑

$name::_formula_24rw
它会打印出来

在串联中使用未初始化的值$name::_formula_24rw。或串在

请始终保持使用警告;严格使用,;在节目开始时

因此,要么使用${…},其中{}分隔变量名

use warnings;
use strict;

my $name = "LPA";
my $date= 39; 

my $file = "/pathtoFile/window/$name/cavin_l/'$name'_formula_24rw$date.csv";
或者用不同的弦把它拼凑起来

my $file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";
这个。。。在字符串中插入变量。然后问题是,在您的尝试中,变量名没有被清晰地描述,解释器最终会寻找

/pathtoFile/window/LPA/cavin_l/LPA_formula_24rw39.csv
/pathtoFile/window/LPA/cavin_l/LPA_formula_24rw39.csv
也就是说,包$name中的变量_formula_24rw;这是因为由于历史原因,$文件中$name之后的“after a variable name so”仍然是::。因为没有这样的变量,所以最后是$date的第一个“值”,然后是$date的值

最重要的收获:使用警告;我会抓到这个的。试着跑

$name::_formula_24rw
它会打印出来

在串联中使用未初始化的值$name::_formula_24rw。或串在

请始终保持使用警告;严格使用,;在节目开始时

因此,要么使用${…},其中{}分隔变量名

use warnings;
use strict;

my $name = "LPA";
my $date= 39; 

my $file = "/pathtoFile/window/$name/cavin_l/'$name'_formula_24rw$date.csv";
或者用不同的弦把它拼凑起来

my $file = "/pathtoFile/window/$name/cavin_l/${name}_formula_24rw$date.csv";

你成了过时的“报价包分隔符”的牺牲品

$name''u formula_24被解释为$name::_formula24,由于该变量未定义,因此将插入空字符串

你应该把它改成

my $file = '/pathtoFile/window/' 
    . $name . '/cavin_l/' . $name . '_formula_24rw' . "$date.csv";
引用佩尔达先生的话:

Perl中有两个包分隔符:双冒号::和 单引号'。普通标识符可以以 双冒号,可以包含由双冒号分隔的多个部分 科隆。单引号有类似的规则,但有例外 它们在标识符末尾不合法:即, $foo和$foo'bar是合法的,但$foo'bar不是


你成了过时的“报价包分隔符”的牺牲品

$name''u formula_24被解释为$name::_formula24,由于该变量未定义,因此将插入空字符串

你应该把它改成

my $file = '/pathtoFile/window/' 
    . $name . '/cavin_l/' . $name . '_formula_24rw' . "$date.csv";
引用佩尔达先生的话:

Perl中有两个包分隔符:双冒号::和 单引号'。普通标识符可以以 双冒号,可以包含由双冒号分隔的多个部分 科隆。单引号有类似的规则,但有例外 它们在标识符末尾不合法:即, $foo和$foo'bar是合法的,但$foo'bar不是