> On May 13, 2020, at 9:37 PM, ToddAndMargo via perl6-users 
> <perl6-us...@perl.org> wrote:
> 
> Hi All,
> 
> Do we have anything like Bash's "." statement where
> we can read in a bunch of values from a .cfg file?
> (I think it is called "include", but I am not sure.)
> 
> . /etc/sysconfig/network-scripts/ifcfg-br0
> 
> which populates these (and other) variables
> 
> DEVICE=br0
> TYPE=Bridge
> ONBOOT=yes
> USERCTL=yes
> DELAY=0
> NM_CONTROLLED=yes
> BOOTPROTO=none
> PREFIX=24
> ...
> 
> Many thanks,
> -T

Hi Todd,

FYI, the `.` Bash command is also called `source`, which is easier to search on 
the Web, and clearer in email:
        https://ss64.com/bash/source.html

The closest equivalent in Raku is:
        https://docs.raku.org/routine/EVALFILE
, which could be used for config data like so:
        $ cat a.dat
        $foo = "bar";
        $baz = "quxx";

        $ perl6 -e 'our ($foo, $baz); EVALFILE "a.dat"; .say for $foo, $baz;'
        bar
        quxx

, but please do not use it for this purpose.

EVALFILE is in all-caps to show that it might be dangerous and not for general 
use; it is “grep-able evil”, and could eval any valid Raku code, even evil 
things like `run “rm -rf /“`.

IMHO, Bash's `source`-style of loading variables pollutes the main namespace 
and causes hard-to-debug “action at a distance”.
In Raku (or any other dynamic language), the use of some kind of Config module 
is safer and cleaner:
        https://modules.raku.org/t/CONFIG
        https://github.com/raku-community-modules/perl6-Config-JSON
        https://github.com/Skarsnik/perl6-config-simple
        https://metacpan.org/pod/Config::Tiny

For example:

$ cat config.json
{
  "baz": "quxx",
  "foo": "bar”
}
$ perl6 -e 'use Config::JSON; my %c; %c{$_} = jconf($_) for <foo baz>; say 
%c{$_} for <foo baz>;'
bar
quxx

$ cat b.dat
foo = bar
baz = quxx
$ perl6 -e 'use Config::Tiny:from<Perl5>; my $conf = 
Config::Tiny.read("b.dat"); .say for $conf<_><foo baz>'
bar
quxx


— 
Hope this helps,
Bruce Gray (Util of PerlMonks)

Reply via email to