Regex$1进入变量会干扰另一个变量
我已经挣扎了一段时间,我的代码部分,现在无法找出它。似乎与1美元的处理方式有关,但我找不到任何相关信息 正则表达式找到16640021并将其分配到数组中的一个位置Regex$1进入变量会干扰另一个变量,regex,perl,Regex,Perl,我已经挣扎了一段时间,我的代码部分,现在无法找出它。似乎与1美元的处理方式有关,但我找不到任何相关信息 正则表达式找到16640021并将其分配到数组中的一个位置 my @one; my @two; my $articleregex = qr/\s*\d*\/\s*\d*\|\s*(.*?)\|/p; # $1 = article number my $row = " 7/ 1| 16640021|Taats 3 IP10 |14-
my @one;
my @two;
my $articleregex = qr/\s*\d*\/\s*\d*\|\s*(.*?)\|/p; # $1 = article number
my $row = " 7/ 1| 16640021|Taats 3 IP10 |14-03-03| | | 1,0000|st | | 01| | N| 0|";
if ($row =~ /$articleregex/g) {
$one[0] = $1;
}
if ($row =~ /$articleregex/g) {
$two[0] = $1;
}
print $one[0];
print $two[0];
哪个输出
Use of uninitialized value in print at perltest3.pl line 13.
16640021
似乎$1[0]的名称在某种程度上干扰了$2[0]的名称。这对我来说似乎很奇怪,因为这两个变量及其名称不应该以任何方式相互作用,因为您使用了
if(//g)
而不是if(//)
- 标量上下文中的
将//g
[1]设置为停止匹配的位置,或者如果匹配不成功,则取消设置pos($\u)
[1]pos($\u)
- 标量上下文中的
在位置//g
[1]处开始匹配pos($\ux)
$_ = "ab";
say /(.)/g ? $1 : "no match"; # a
say /(.)/g ? $1 : "no match"; # b
say /(.)/g ? $1 : "no match"; # no match
say /(.)/g ? $1 : "no match"; # a
这允许以下内容在匹配中进行迭代:
while (/(.)/g) {
say $1;
}
如果(//g)[3],不要使用
$\uu
用于表示匹配的变量
除非还使用了/c
除非您在(//g)
时展开,或者使用if(//gc)
进行标记化
这是因为您使用了if(//g)
而不是if(//)
- 标量上下文中的
//g
将pos($\u)
[1]设置为停止匹配的位置,或者如果匹配不成功,则取消设置pos($\u)
[1]
- 标量上下文中的
//g
在位置pos($\ux)
[1]处开始匹配
比如说,
$_ = "ab";
say /(.)/g ? $1 : "no match"; # a
say /(.)/g ? $1 : "no match"; # b
say /(.)/g ? $1 : "no match"; # no match
say /(.)/g ? $1 : "no match"; # a
这允许以下内容在匹配中进行迭代:
while (/(.)/g) {
say $1;
}
如果(//g)
[3],不要使用
$\uu
用于表示匹配的变量
除非还使用了/c
除非您在(//g)
时展开,或者使用if(//gc)
进行标记化