这个perl替换出了什么问题?

xyz*_*xyz 1 regex perl

my $test = "_.4.1\n";
print $test;
my $docid=4;
$test =~ s/_.$docId.1/_.$docId.0/gm;
print $test
Run Code Online (Sandbox Code Playgroud)

我希望看到:

_.4.1

_.4.0

但我得到:

_.4.1

_.4.1

TLP*_*TLP 8

你有资金I$docId您的正则表达式,但具有较低的情况下,声明它i.$docid不被认为是同一个变量$docId.Perl区分变量名称中的大写和小写.

你应该经常使用

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

为了防止像这样的简单错误.

另请参阅:为什么使用严格和警告?

  • 作为一个简单的habbit,我总是使用perl -w (3认同)
  • 为什么你会使用`-w`,当更加灵活和强大的替代方案,十年前在Perl中添加了"使用警告"? (2认同)