Hi,
I don't understand why the 2 following Perl6 programs give a different result when running. If someone could give me an explanation, it will help me a lot. Many thanks. (Note the 2 programs run on Linux and the Linux environment variable $toto is set to "totoenv". ( export toto=totenv ) Program1 : cat test051.pl6 #!/opt/rakudo-star-2016.10/bin/perl6 use v6; grammar TEST { rule TOP { :i \s* <varenv> } token varenv {'$'<mot> } token mot { <[a..z A..Z 0..9 =\-_!~'():@&+$,\']>+ } } class ActionsTest { method TOP ($/) { $/.make( ~%*ENV{$<varenv><mot>}); } } my $actions = ActionsTest.new; my $script = "\$toto" ; my $scr = TEST.parse($script,:$actions); say $scr; say $scr.made; ===> ./test051.pl6 ?$toto? varenv => ?$toto? mot => ?toto? totoenv ---------------- This programs runs fine and displayed the value for the toto environment variable. Program2: cat test052.pl6 grammar TEST { rule TOP { :i \s* <varenv> } token varenv {'$'<mot> } token mot { <[a..z A..Z 0..9 =\-_!~'():@&+$,\']>+ } } class ActionsTest { method varenv ($/) { $/.make( %*ENV{$<varenv><mot>}); } method TOP ($/) { $/.make( ~$/); } } my $actions = ActionsTest.new; my $script = "\$toto" ; my $scr = TEST.parse($script,:$actions); say $scr; say $scr.made; ===> Use of Nil in string context in method varenv at ./test052.pl6 line 14 ?$toto? varenv => ?$toto? mot => ?toto? $toto ---------------- This program displays an error message and doesn't find the value of toto environment variable. The only difference between the 2 programs is instruction "make( %*ENV{$<varenv><mot>}" is part of the TOP method in the program 1 and part of the varenv method in program 2. I'm certainly missing something but I don't understand why program 2 doesn't work. I'm very interested to get explanations for that. It will help me to understand how to modify and AST using Perl6. Thanks a lot for your help. Best regards, Jean-Pierre