«Рекурсивные» константы в perl - PullRequest
2 голосов
/ 10 августа 2010

Есть ли какой-нибудь надежный способ использовать одну константу при определении другой константы в perl?

Очевидно, что не работает

use constant {
    MAIN_DIR   => "/path/to/some/dir",
    PROP_DIR => MAIN_DIR . "/sub_dir",
    PROP_FILE  => PROP_DIR . "/props.props",
};

Единственное, что яМожно подумать, это несколько use constant строк, но это немного некрасиво ...

Ответы [ 3 ]

5 голосов
/ 10 августа 2010

К вашему сведению, вы можете использовать постоянные функции в первую очередь (вот как работает прагма constants):

sub MAIN_DIR  () { "/path/to/some/dir"       }
sub PROP_DIR  () { MAIN_DIR . "/sub_dir"     }
sub PROP_FILE () { PROP_DIR . "/props.props" }
3 голосов
/ 10 августа 2010

Согласно perldoc , пути к этому нет.По крайней мере, не с use constants.

Я бы использовал несколько операторов use.

1 голос
/ 10 августа 2010
$ perl -wle 'use Readonly; Readonly my $FOO => "foo"; Readonly my $FOOBAR => $FOO . "bar"; print $FOOBAR;'
foobar

PBP (Perl Best Practices) рекомендует использовать Readonly

...