David B
David B

Reputation: 30018

"Recursive" constants in perl

Is there some conviented way to use one constant when defining another constant in perl?

The following obviously does not work

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

The only think I could think of is multiple use constant lines, but it's a bit ugly...

Upvotes: 2

Views: 149

Answers (3)

nicomen
nicomen

Reputation: 1203

$ perl -wle 'use Readonly; Readonly my $FOO => "foo"; Readonly my $FOOBAR => $FOO . "bar"; print $FOOBAR;'
foobar

PBP (Perl Best Practices) recommends using Readonly

Upvotes: 1

Eugene Yarmash
Eugene Yarmash

Reputation: 150128

FYI, you can use constant functions in the first place (that's how the constants pragma works):

sub MAIN_DIR  () { "/path/to/some/dir"       }
sub PROP_DIR  () { MAIN_DIR . "/sub_dir"     }
sub PROP_FILE () { PROP_DIR . "/props.props" }

Upvotes: 5

musiKk
musiKk

Reputation: 15189

According to perldoc there is no way around that. At least not with use constants.

I'd go with using multiple use statements.

Upvotes: 3

Related Questions