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

Ok I have a variable eg $value
it actually contains $100
I would like perl to look at this variable $value
and ask if it contains the $ sign
if so do this
if not do that.
How may I make perl ask this.

Replies are listed 'Best First'.
Re: if contains
by Zaxo (Archbishop) on Jul 05, 2003 at 14:22 UTC

    I suspect your difficulty is in not escaping the '$', which has special meaning:

    if ($value =~ /\$/) { # ... }

    After Compline,
    Zaxo

      Actually while $ does usually have a special meaning, Perl seems to try to do the Right Thing:
      print 'aha' if('ab$de' =~ /$/);
      works (it does find the '$' character - actually it DOES NOT, see below). However,
      print 'aha' if('ab$de' =~ /b$/);
      is looking for a 'b' at the end of the string, and
      print 'aha' if('ab$de' =~ /$d/);
      is looking for the contents of $d anywhere in the string, which it does find as $d is empty.

      Personally I'd consider index for a simple string search like this one.


      Update: D'oh! Yes pfaut, that makes a LOT more sense. That should teach me something...

      print 'aha' if('' =~ /$/);
      prints 'aha' because even an empty string has an end...

      --
      I'd like to be able to assign to an luser

        Actually while $ does usually have a special meaning, Perl seems to try to do the Right Thing:
        print 'aha' if('ab$de' =~ /$/);

        print 'aha' if 'abcde' =~ /$/ also prints 'aha'. I do believe it's matching end of line, not the dollar sign.

        90% of every Perl application is already written.
        dragonchild
Re: if contains
by broquaint (Abbot) on Jul 05, 2003 at 16:01 UTC
    If you just want to see if a character is in a string then use the index function like so
    my $value = '$100'; if( index($value, '$') > -1) { print 'found "$" in $value'; } else { print 'no "$" in $value'; } __output__ found "$" in $value
    And if you want to check it's at the begining of a string just check the return value e.g
    my $value = '$100'; if( index($value, '$') == 0) { print 'found "$" at beginning of $value'; } else { print 'no "$" in $value'; } __output___ found "$" at beginning of $value
    See. index for more info.
    HTH

    _________
    broquaint