为什么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/^.//;
答案 0 :(得分:7)
$string
不参与替换。它位于赋值的RHS上,并且在赋值的RHS上具有未定义的值不应触发警告。
如果$new
未定义,则可以使用
my $new = $string;
$new =~ s/^.// if defined($new);
答案 1 :(得分:3)
$string
没有替代品,因此不会发出警告。此代码将 undef 值从$string
复制到$new
,然后在$new
上进行替换。
如果要删除此警告,可以更改为:
( $new = ($string // '') ) =~ s/^.//;