gpt4 book ai didi

regex - 在 Perl 中,$1 变量的 'Use of uninitialized value in substitution iterator' 错误

转载 作者:行者123 更新时间:2023-12-04 02:13:06 26 4
gpt4 key购买 nike

从在 stackoverflow.com 上找到的其他示例中工作,我试图替换 Perl 中字符串上正则表达式匹配的第 N 个实例。我的代码如下:

#!/usr/bin/env perl
use strict;
use warnings;

my $num_args = $#ARGV +1;
if($num_args != 3) {
print "\nUsage: replace_integer.pl occurance replacement to_replace";
print "\nE.g. `./replace_integer.pl 1 \"INTEGER_PLACEHOLDER\" \"method(0 , 1, 6);\"`";
print "\nWould output: \"method(INTEGER_PLACEMENT , 1, 6);\"\n";
exit;
}

my $string =$ARGV[2];

my $cont =0;
sub replacen {
my ($index,$original,$replacement) = @_;
$cont++;
return $cont == $index ? $replacement: $original;
}

sub replace_quoted {
my ($string, $index,$replacement) = @_;
$cont = 0; # initialize match counter
$string =~ s/[0-9]+/replacen($index,$1,$replacement)/eg;
return $string;
}

my $result = replace_quoted ( $string, $ARGV[0] ,$ARGV[1]);
print "RESULT: $result\n";

为了
./replace_integer.pl 3 "INTEGER_PLACEHOLDER" "method(0, 1 ,6);"

我希望输出
RESULT: method(0, 1 ,INTEGER_PLACEHOLDER);

不幸的是我得到的输出
RESULT: method(,  ,INTEGER_PLACEHOLDER);

出现这些警告/错误
Use of uninitialized value in substitution iterator at ./replace_integer.pl line 26.
Use of uninitialized value in substitution iterator at ./replace_integer.pl line 26.

第 26 行是以下行:
$string =~ s/[0-9]+/replacen($index,$1,$replacement)/eg;

我已经确定这是由于 $1 未初始化。据我了解,$1 应该具有最后一场比赛的值(value)。鉴于我非常简单的正则表达式( [0-9]+ ),我认为没有理由不初始化它。

我知道有更简单的方法可以在 sed 中查找和替换第 N 个实例,但是一旦克服了这个障碍,我将需要 Perl 的前后引用(sed 不支持)

有谁知道这个错误的原因以及如何解决它?

我正在使用 Perl v5.18.2 ,专为 x86_64-linux-gnu-thread-multi 构建

感谢您的时间。

最佳答案

$1 仅在您捕获模式后设置,例如:

$foo =~ /([0-9]+)/;
# $1 equals whatever was matched between the parens above

尝试将您的匹配包装在括号中以将其捕获为 1 美元

关于regex - 在 Perl 中,$1 变量的 'Use of uninitialized value in substitution iterator' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36579696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com