megaurav2002 has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks ..

I want to know how can we do simple text substituion in Perl. I am looking for something similar to this C code #define UPPER_LIMIT 10 in Perl.

Thanks
Gaurav Talwar

Replies are listed 'Best First'.
Re: simple substitution
by lidden (Curate) on Nov 02, 2007 at 05:24 UTC
    use constant UPPER_LIMIT => 10;
      Thanks for the help!
Re: simple substitution
by narainhere (Monk) on Nov 02, 2007 at 06:28 UTC
    if you are defining "UPPER_LIMIT" for a single script then
    use constant UPPER_LIMIT => 10;
    as suggested by lidden will be fine.If you want to scale up and use the same constant in multiple scripts then you can define the constant (and all common VARS that you scripts) in a file and require that file in you scripts! To illustrate this type the following
    $UPPER_LIMIT=10; 1;
    in a file called "ENV.pl"(Please note the 1 thats returned in last line), then in you scripts use
    require "ENV.pl";
    This will import the contents of ENV.pl

    The world is so big for any individual to conquer

      Using require to load a file without a package statement is asking for trouble. Use do for such files.

      Better yet if you're going for re-use, make a real module (one that uses package) and use Exporter or the like to allow the user code to import only the constants and variables it needs.

Re: simple substitution
by tuxz0r (Pilgrim) on Nov 02, 2007 at 15:13 UTC
    A couple other ways to do this (depending on your goals and needs) would be to use Readonly instead of use constant, which is less prone to problems like having your constants considered "bare words" in string interpolation, hash keys and the like. So, you might use:
    use Readonly; Readonly my $UPPERLIMIT => 10; ...

    And, though I think I'm the only one who's ever used this feature, perl has the -P option which will actually pass your script through the C preprocessor before interpreting and running. In that case, you could just use #define for constants just like in C and C++. But, that wouldn't be very 'perlish', would it.

    These may not be what you need (especially the -P option), but I do like Readonly a little better than use constant.

    ---
    echo S 1 [ Y V U | perl -ane 'print reverse map { $_ = chr(ord($_)-1) } @F;'