2011-12-15 33 views

回答

8

您有一個資本I$docId在你的正則表達式中,但是用小寫i來聲明它。 $docid不被視爲與$docId相同的變量。 Perl區分變量名稱中的大寫和小寫。

你應該總是使用

use strict; 
use warnings; 

爲了防止簡單的錯誤是這樣的。

參見:Why use strict and warnings?

+3

作爲一個簡單的habbit,我總是使用perl -w – Nikodemus 2011-12-15 09:21:07

+2

爲什麼在十年前向Perl添加更靈活和更強大的替代方法`use warnings`時,會使用`-w`? – 2011-12-15 09:59:15

-1

嘗試使用-w選項在Perl

_.4.1 
Use of uninitialized value $docId in regexp compilation at test.pl line 4. 
_.4.1 


$docid != $docId; 
1

Perl 5.10的有一個很好的功能,使得這一問題更加容易。替換運算符的模式部分中的\K指示它不會替換\K之前的任何內容。這樣,可以使圖案以找到您想改變一下,但隨後只替換不改變部分:

use v5.10; 
use strict; 
use warnings; 

my $test = "_.4.1"; 
say $test; 

my $docId=4; 
$test =~ s/_\.$docId\.\K1/0/; 

say $test; 

我刪除了/g/m標誌,因爲他們不這樣做你的例子中的任何東西

如果你不使用V5.10,但(和它的不支持的版本之一了),你可以得到一個積極的回顧後相同的效果(只要它是一個固定寬度模式):

use strict; 
use warnings; 

my $test = "_.4.1"; 
print "$test\n"; 

my $docId = 4; 
$test =~ s/(?<=_\.$docId\.)1/0/; 

print "$test\n";