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

sid*_*com 0 perl warnings initialization substitution

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

Use of uninitialized value `$new` in substitution (s///) at ./perl.pl line 8.
Run Code Online (Sandbox Code Playgroud)

并不是

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/^.//;
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 7

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

如果$new没有定义,你可以使用

my $new = $string;
$new =~ s/^.// if defined($new);
Run Code Online (Sandbox Code Playgroud)