http://www.perlmonks.org?node_id=195660


in reply to Returning Values from Subroutines

Hey there. I'm not entirely sure why it's not working as is as I am but a novice, but the following works for me:
#!/usr/local/bin/perl my $answer = &add(1,2); print $answer; sub add{ return $result = ($_[0] + $_[1]); }

As far as the original not working, will the initial sub ("main") even run without a call to it? I tried running it with a call for it and got an error. Also, in the the "add" sub, you are returning $answer, but it was never assigned a value in the sub.

Anyone else want to chime in? I'd like to hear more on this one as well.

mb++

was hoping to get first return, but was beat out by six minutes... curses!

Replies are listed 'Best First'.
Re: Re: Returning Values from Subroutines
by mojobozo (Monk) on Sep 06, 2002 at 15:05 UTC
    A little more golf on this one:
    #!/usr/local/bin/perl print add(1,2); sub add{ return $result = ($_[0] + $_[1]); }

    Unless, of course, you wanted to save the value returned.
    mb
      And, using the example in ignatz's reposnse, even more strokes shaved:
      #!/usr/local/bin/perl print add(1,2); sub add{ return ($_[0] + $_[1]); }

      Man, this is getting fun. I wish I could shave this many strokes of my discgolf game!
      _____________________________________________
      mojobozo
      word (wûrd)
      interj. Slang. Used to express approval or an affirmative response to
      something. Sometimes used with up. Source
        Well, as long as we're golfing:
        #!/usr/local/bin/perl print add(1,2); sub add{ $_[0] + $_[1]; }

        -- Dan

        The return keyword can be omitted when it's the last line of a sub, so this will also work:
        #!/usr/local/bin/perl print add(1,2); sub add{ $_[0]+$_[1]; }
        or for that matter
        sub add{ shift+shift; }
        Update: OK, so I guess the shift() there is ambiguous. Anyway, you get the point.

        blokhead

      In 9 strokes:

      # 123456789 sub add{pop()+pop}

      — Arien