Есть ли способ получить версию из META6.json в коде модуля Raku?

#raku

#raku

Вопрос:

Я хочу сделать что-то вроде этого:

 die "Fatal error: application version $MY-APPLICATION-VERSION"
  

Поскольку модуль Raku не может предположить относительное расположение файлов, с которыми он был упакован (например, все установленные модули помещены в плоскую структуру каталогов) Я не могу просто сделать $?FILE.IO.add("../META6.json").slurp . Есть ли способ получить версию, объявленную в META6.json, в приложении / модуле Raku, которое может быть установлено, а может и не быть?

Ответ №1:

Начиная с rakudo v2019.03 , модули могут обращаться к объекту Distribution, используемому для его загрузки через $?DISTRIBUTION. Это позволяет следующее:

 unit module My::Module;

BEGIN my $VERSION = $?DISTRIBUTION.meta<version>;
use My::SubModule:ver($VERSION); # ensure we only ever use the version included in this distribution

die "Fatal error: application version $VERSION"