The substitution is never happening, that's why. And there must
be something else you omitted, because as shown, your code
does not run because the $NETOBJ variable is not declared anywhere.
Removing the "use strict" makes it run, and running it with
the -w flag (always use -w and strict!) shows you the problem:
Name "main::NETOBJ" used only once: possible typo at t.pl line 6.
Use of uninitialized value in scalar dereference at t.pl line 6.
Use of uninitialized value in concatenation (.) at t.pl line 6.
Ok, here's what is happening:
- Because "$$NETOBJ.parameter" is in double quotes, Perl is
interpreting $NETOBJ as a variable, and trying to interpolate
its value. Because it doesn't have a value, you get an undef
value.
- Now, the first "$" in "$$NETOBJ" is also interpolated by
perl, trying to interpret it as a dereference to $NETOBJ (this
is, if $NETOBJ contained a reference to a scalar value, $$NETOBJ
would dereference it and give you the value). Because $NETOBJ
is undef, the dereferencing fails too, This produces the
"Use of uninitialized value in scalar dereference" error.
- At this point $a contains already ".parameter".
- The substitution is escaped correctly, therefore it looks for
the string '$$NETOBJ'. But that string is not there, therefore
the substitution doesn't happen, and you get ".parameter"
as your final result
The solution if you want the literal string '$$NETOBJ' in $a
is to use single quotes instead of double quotes. The single
quotes prevent interpolation. Like this:
$a='$$NETOBJ.parameter';
--ZZamboni