On 2020-05-13 22:27, Bruce Gray wrote:
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)
Excellent! Thank you!