in reply to Re^3: Indirect variable expansion
in thread Indirect variable expansion

> Yes, it does:

Well obviously not for me and the code I posted!

update

the problem seems to be bash related, the -M$M doesn't expand the $M I've just set. But Perl's sub-process has the correct ENV.

Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^5: Indirect variable expansion
by hippo (Archbishop) on Nov 18, 2024 at 15:41 UTC

    Well, yes. At the time the variable substitution occurs, the variable has not been set yet. eg.:

    $ quux=foo echo $quux $

    "Fix" it by separating the one command into 2:

    $ quux=foo; echo $quux foo $

    It isn't just bash, BTW. Any Bourne-compatible shell should behave like this.


    🦛

      You would still have to export it to see it in the perl process:

      $ export M=MyMod $ perl -M$M -E 'say $ENV{M}->VERSION' $ unset M

      Or just do it in a subshell to keep your environment clean:

      $ (export M=MyMod; perl -M$M -E 'say $ENV{M}->VERSION')
        yes my point was to avoid the export, because it IS visible inside the Perl process

        ~$ M=whatever perl -E'say $ENV{M}' whatever

        unfortunately a dynamic use inside the process is not less complicated than the solutions already shown (eval or Ikegami's if 1 trick)

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        see Wikisyntax for the Monastery