0

为什么 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/^.//;
4

2 回答 2

7

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

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

my $new = $string;
$new =~ s/^.// if defined($new);
于 2012-12-25T11:19:29.877 回答
3

没有替代品$string,所以它不会发出警告。此代码将undef值从$stringinto复制$new,然后对$new.

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

( $new = ($string // '') ) =~ s/^.//;
于 2012-12-25T11:07:43.737 回答