警告:使用未初始化的值替换

时间:2012-12-25 10:40:25

标签: perl warnings substitution initialization

为什么Perl会在这种情况下发出警告

Use of uninitialized value `$new` in substitution (s///) at ./perl.pl line 8.

而不是

Use of uninitialized value `$string` in substitution (s///) at ./perl.pl line 8.

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

my $string;
my $new;

( $new = $string ) =~ s/^.//;

2 个答案:

答案 0 :(得分:7)

$string不参与替换。它位于赋值的RHS上,并且在赋值的RHS上具有未定义的值不应触发警告。

如果$new未定义,则可以使用

my $new = $string;
$new =~ s/^.// if defined($new);

答案 1 :(得分:3)

$string没有替代品,因此不会发出警告。此代码将 undef 值从$string复制到$new,然后在$new上进行替换。

如果要删除此警告,可以更改为:

( $new = ($string // '') ) =~ s/^.//;