$s =~ s/(id=")(".*)/$1123$2/; # Use of uninitialized value $1123 in concatenation (.) or string
Chociaż oczekiwano go zastąpić $1
, Perl widzi go jako zmiennej $1123
. Perl nie może wiedzieć, że masz na myśli $1
. Więc trzeba ograniczyć variablisation do $1
określając go jako ${1}
:
$s =~ s/(id=")(".*)/${1}123$2/;
To jest zawsze dobry pomysł, aby zawierać następujące elementy w górnej części skryptu. Zaoszczą ci dużo czasu i wysiłku.
use strict;
use warnings;
Na przykład, uruchamiając skrypt z powyższych modułów zawartych rezultaty w komunikat o błędzie:
Use of uninitialized value $1123 in concatenation (.) or string at /tmp/test.pl line 7.
(lekceważyć zgłoszoną nazwę skryptu oraz numery linii.) Wyraźnie stwierdza, co perl oczekiwano. twierdzenia
Innym podejściem użyciu look-tył i antycypowana:
$s =~ s/(?<=id=")(?=")/123/;
dzięki. Szukałem składni $ {1}. –
Wolę wygląd za i przed siebie – justintime
@justintime, Bonus: Wersja z lookarounds jest szybsza, ponieważ nie ma żadnych przechwytów. – ikegami